#include "functions.h"
#include "osal/osdef.h"

#ifdef OS_WINDOWS
#include <GL/gl.h>
#endif


OPENGL_NAMESPACE_BEGIN

bool GL_VERSION_1_0_supported = false;
PFNGLCULLFACEPROC glCullFace = NULL;
PFNGLFRONTFACEPROC glFrontFace = NULL;
PFNGLHINTPROC glHint = NULL;
PFNGLLINEWIDTHPROC glLineWidth = NULL;
PFNGLPOINTSIZEPROC glPointSize = NULL;
PFNGLPOLYGONMODEPROC glPolygonMode = NULL;
PFNGLSCISSORPROC glScissor = NULL;
PFNGLTEXPARAMETERFPROC glTexParameterf = NULL;
PFNGLTEXPARAMETERFVPROC glTexParameterfv = NULL;
PFNGLTEXPARAMETERIPROC glTexParameteri = NULL;
PFNGLTEXPARAMETERIVPROC glTexParameteriv = NULL;
PFNGLTEXIMAGE1DPROC glTexImage1D = NULL;
PFNGLTEXIMAGE2DPROC glTexImage2D = NULL;
PFNGLDRAWBUFFERPROC glDrawBuffer = NULL;
PFNGLCLEARPROC glClear = NULL;
PFNGLCLEARCOLORPROC glClearColor = NULL;
PFNGLCLEARSTENCILPROC glClearStencil = NULL;
PFNGLCLEARDEPTHPROC glClearDepth = NULL;
PFNGLSTENCILMASKPROC glStencilMask = NULL;
PFNGLCOLORMASKPROC glColorMask = NULL;
PFNGLDEPTHMASKPROC glDepthMask = NULL;
PFNGLDISABLEPROC glDisable = NULL;
PFNGLENABLEPROC glEnable = NULL;
PFNGLFINISHPROC glFinish = NULL;
PFNGLFLUSHPROC glFlush = NULL;
PFNGLBLENDFUNCPROC glBlendFunc = NULL;
PFNGLLOGICOPPROC glLogicOp = NULL;
PFNGLSTENCILFUNCPROC glStencilFunc = NULL;
PFNGLSTENCILOPPROC glStencilOp = NULL;
PFNGLDEPTHFUNCPROC glDepthFunc = NULL;
PFNGLPIXELSTOREFPROC glPixelStoref = NULL;
PFNGLPIXELSTOREIPROC glPixelStorei = NULL;
PFNGLREADBUFFERPROC glReadBuffer = NULL;
PFNGLREADPIXELSPROC glReadPixels = NULL;
PFNGLGETBOOLEANVPROC glGetBooleanv = NULL;
PFNGLGETDOUBLEVPROC glGetDoublev = NULL;
PFNGLGETERRORPROC glGetError = NULL;
PFNGLGETFLOATVPROC glGetFloatv = NULL;
PFNGLGETINTEGERVPROC glGetIntegerv = NULL;
PFNGLGETSTRINGPROC glGetString = NULL;
PFNGLGETTEXIMAGEPROC glGetTexImage = NULL;
PFNGLGETTEXPARAMETERFVPROC glGetTexParameterfv = NULL;
PFNGLGETTEXPARAMETERIVPROC glGetTexParameteriv = NULL;
PFNGLGETTEXLEVELPARAMETERFVPROC glGetTexLevelParameterfv = NULL;
PFNGLGETTEXLEVELPARAMETERIVPROC glGetTexLevelParameteriv = NULL;
PFNGLISENABLEDPROC glIsEnabled = NULL;
PFNGLDEPTHRANGEPROC glDepthRange = NULL;
PFNGLVIEWPORTPROC glViewport = NULL;

bool GL_VERSION_1_1_supported = false;
PFNGLDRAWARRAYSPROC glDrawArrays = NULL;
PFNGLDRAWELEMENTSPROC glDrawElements = NULL;
PFNGLGETPOINTERVPROC glGetPointerv = NULL;
PFNGLPOLYGONOFFSETPROC glPolygonOffset = NULL;
PFNGLCOPYTEXIMAGE1DPROC glCopyTexImage1D = NULL;
PFNGLCOPYTEXIMAGE2DPROC glCopyTexImage2D = NULL;
PFNGLCOPYTEXSUBIMAGE1DPROC glCopyTexSubImage1D = NULL;
PFNGLCOPYTEXSUBIMAGE2DPROC glCopyTexSubImage2D = NULL;
PFNGLTEXSUBIMAGE1DPROC glTexSubImage1D = NULL;
PFNGLTEXSUBIMAGE2DPROC glTexSubImage2D = NULL;
PFNGLBINDTEXTUREPROC glBindTexture = NULL;
PFNGLDELETETEXTURESPROC glDeleteTextures = NULL;
PFNGLGENTEXTURESPROC glGenTextures = NULL;
PFNGLISTEXTUREPROC glIsTexture = NULL;

bool GL_VERSION_1_2_supported = false;
PFNGLBLENDCOLORPROC glBlendColor = NULL;
PFNGLBLENDEQUATIONPROC glBlendEquation = NULL;
PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements = NULL;
PFNGLTEXIMAGE3DPROC glTexImage3D = NULL;
PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D = NULL;
PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D = NULL;

bool GL_VERSION_1_3_supported = false;
PFNGLACTIVETEXTUREPROC glActiveTexture = NULL;
PFNGLSAMPLECOVERAGEPROC glSampleCoverage = NULL;
PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D = NULL;
PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D = NULL;
PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D = NULL;
PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D = NULL;
PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D = NULL;
PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D = NULL;
PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage = NULL;

bool GL_VERSION_1_4_supported = false;
PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate = NULL;
PFNGLMULTIDRAWARRAYSPROC glMultiDrawArrays = NULL;
PFNGLMULTIDRAWELEMENTSPROC glMultiDrawElements = NULL;
PFNGLPOINTPARAMETERFPROC glPointParameterf = NULL;
PFNGLPOINTPARAMETERFVPROC glPointParameterfv = NULL;
PFNGLPOINTPARAMETERIPROC glPointParameteri = NULL;
PFNGLPOINTPARAMETERIVPROC glPointParameteriv = NULL;

bool GL_VERSION_1_5_supported = false;
PFNGLGENQUERIESPROC glGenQueries = NULL;
PFNGLDELETEQUERIESPROC glDeleteQueries = NULL;
PFNGLISQUERYPROC glIsQuery = NULL;
PFNGLBEGINQUERYPROC glBeginQuery = NULL;
PFNGLENDQUERYPROC glEndQuery = NULL;
PFNGLGETQUERYIVPROC glGetQueryiv = NULL;
PFNGLGETQUERYOBJECTIVPROC glGetQueryObjectiv = NULL;
PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv = NULL;
PFNGLBINDBUFFERPROC glBindBuffer = NULL;
PFNGLDELETEBUFFERSPROC glDeleteBuffers = NULL;
PFNGLGENBUFFERSPROC glGenBuffers = NULL;
PFNGLISBUFFERPROC glIsBuffer = NULL;
PFNGLBUFFERDATAPROC glBufferData = NULL;
PFNGLBUFFERSUBDATAPROC glBufferSubData = NULL;
PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData = NULL;
PFNGLMAPBUFFERPROC glMapBuffer = NULL;
PFNGLUNMAPBUFFERPROC glUnmapBuffer = NULL;
PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv = NULL;
PFNGLGETBUFFERPOINTERVPROC glGetBufferPointerv = NULL;

bool GL_VERSION_2_0_supported = false;
PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate = NULL;
PFNGLDRAWBUFFERSPROC glDrawBuffers = NULL;
PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate = NULL;
PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate = NULL;
PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate = NULL;
PFNGLATTACHSHADERPROC glAttachShader = NULL;
PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation = NULL;
PFNGLCOMPILESHADERPROC glCompileShader = NULL;
PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
PFNGLCREATESHADERPROC glCreateShader = NULL;
PFNGLDELETEPROGRAMPROC glDeleteProgram = NULL;
PFNGLDELETESHADERPROC glDeleteShader = NULL;
PFNGLDETACHSHADERPROC glDetachShader = NULL;
PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray = NULL;
PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray = NULL;
PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib = NULL;
PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform = NULL;
PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders = NULL;
PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation = NULL;
PFNGLGETPROGRAMIVPROC glGetProgramiv = NULL;
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = NULL;
PFNGLGETSHADERIVPROC glGetShaderiv = NULL;
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = NULL;
PFNGLGETSHADERSOURCEPROC glGetShaderSource = NULL;
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = NULL;
PFNGLGETUNIFORMFVPROC glGetUniformfv = NULL;
PFNGLGETUNIFORMIVPROC glGetUniformiv = NULL;
PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv = NULL;
PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv = NULL;
PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv = NULL;
PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv = NULL;
PFNGLISPROGRAMPROC glIsProgram = NULL;
PFNGLISSHADERPROC glIsShader = NULL;
PFNGLLINKPROGRAMPROC glLinkProgram = NULL;
PFNGLSHADERSOURCEPROC glShaderSource = NULL;
PFNGLUSEPROGRAMPROC glUseProgram = NULL;
PFNGLUNIFORM1FPROC glUniform1f = NULL;
PFNGLUNIFORM2FPROC glUniform2f = NULL;
PFNGLUNIFORM3FPROC glUniform3f = NULL;
PFNGLUNIFORM4FPROC glUniform4f = NULL;
PFNGLUNIFORM1IPROC glUniform1i = NULL;
PFNGLUNIFORM2IPROC glUniform2i = NULL;
PFNGLUNIFORM3IPROC glUniform3i = NULL;
PFNGLUNIFORM4IPROC glUniform4i = NULL;
PFNGLUNIFORM1FVPROC glUniform1fv = NULL;
PFNGLUNIFORM2FVPROC glUniform2fv = NULL;
PFNGLUNIFORM3FVPROC glUniform3fv = NULL;
PFNGLUNIFORM4FVPROC glUniform4fv = NULL;
PFNGLUNIFORM1IVPROC glUniform1iv = NULL;
PFNGLUNIFORM2IVPROC glUniform2iv = NULL;
PFNGLUNIFORM3IVPROC glUniform3iv = NULL;
PFNGLUNIFORM4IVPROC glUniform4iv = NULL;
PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv = NULL;
PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv = NULL;
PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv = NULL;
PFNGLVALIDATEPROGRAMPROC glValidateProgram = NULL;
PFNGLVERTEXATTRIB1DPROC glVertexAttrib1d = NULL;
PFNGLVERTEXATTRIB1DVPROC glVertexAttrib1dv = NULL;
PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f = NULL;
PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv = NULL;
PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s = NULL;
PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv = NULL;
PFNGLVERTEXATTRIB2DPROC glVertexAttrib2d = NULL;
PFNGLVERTEXATTRIB2DVPROC glVertexAttrib2dv = NULL;
PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f = NULL;
PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv = NULL;
PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s = NULL;
PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv = NULL;
PFNGLVERTEXATTRIB3DPROC glVertexAttrib3d = NULL;
PFNGLVERTEXATTRIB3DVPROC glVertexAttrib3dv = NULL;
PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f = NULL;
PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv = NULL;
PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s = NULL;
PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv = NULL;
PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv = NULL;
PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv = NULL;
PFNGLVERTEXATTRIB4NSVPROC glVertexAttrib4Nsv = NULL;
PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub = NULL;
PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv = NULL;
PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv = NULL;
PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv = NULL;
PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv = NULL;
PFNGLVERTEXATTRIB4DPROC glVertexAttrib4d = NULL;
PFNGLVERTEXATTRIB4DVPROC glVertexAttrib4dv = NULL;
PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f = NULL;
PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv = NULL;
PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv = NULL;
PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s = NULL;
PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv = NULL;
PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv = NULL;
PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv = NULL;
PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv = NULL;
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = NULL;

bool GL_VERSION_2_1_supported = false;
PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv = NULL;
PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv = NULL;
PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv = NULL;
PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv = NULL;
PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv = NULL;
PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv = NULL;

bool GL_VERSION_3_0_supported = false;
PFNGLCOLORMASKIPROC glColorMaski = NULL;
PFNGLGETBOOLEANI_VPROC glGetBooleani_v = NULL;
PFNGLGETINTEGERI_VPROC glGetIntegeri_v = NULL;
PFNGLENABLEIPROC glEnablei = NULL;
PFNGLDISABLEIPROC glDisablei = NULL;
PFNGLISENABLEDIPROC glIsEnabledi = NULL;
PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback = NULL;
PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback = NULL;
PFNGLBINDBUFFERRANGEPROC glBindBufferRange = NULL;
PFNGLBINDBUFFERBASEPROC glBindBufferBase = NULL;
PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings = NULL;
PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying = NULL;
PFNGLCLAMPCOLORPROC glClampColor = NULL;
PFNGLBEGINCONDITIONALRENDERPROC glBeginConditionalRender = NULL;
PFNGLENDCONDITIONALRENDERPROC glEndConditionalRender = NULL;
PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer = NULL;
PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv = NULL;
PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv = NULL;
PFNGLVERTEXATTRIBI1IPROC glVertexAttribI1i = NULL;
PFNGLVERTEXATTRIBI2IPROC glVertexAttribI2i = NULL;
PFNGLVERTEXATTRIBI3IPROC glVertexAttribI3i = NULL;
PFNGLVERTEXATTRIBI4IPROC glVertexAttribI4i = NULL;
PFNGLVERTEXATTRIBI1UIPROC glVertexAttribI1ui = NULL;
PFNGLVERTEXATTRIBI2UIPROC glVertexAttribI2ui = NULL;
PFNGLVERTEXATTRIBI3UIPROC glVertexAttribI3ui = NULL;
PFNGLVERTEXATTRIBI4UIPROC glVertexAttribI4ui = NULL;
PFNGLVERTEXATTRIBI1IVPROC glVertexAttribI1iv = NULL;
PFNGLVERTEXATTRIBI2IVPROC glVertexAttribI2iv = NULL;
PFNGLVERTEXATTRIBI3IVPROC glVertexAttribI3iv = NULL;
PFNGLVERTEXATTRIBI4IVPROC glVertexAttribI4iv = NULL;
PFNGLVERTEXATTRIBI1UIVPROC glVertexAttribI1uiv = NULL;
PFNGLVERTEXATTRIBI2UIVPROC glVertexAttribI2uiv = NULL;
PFNGLVERTEXATTRIBI3UIVPROC glVertexAttribI3uiv = NULL;
PFNGLVERTEXATTRIBI4UIVPROC glVertexAttribI4uiv = NULL;
PFNGLVERTEXATTRIBI4BVPROC glVertexAttribI4bv = NULL;
PFNGLVERTEXATTRIBI4SVPROC glVertexAttribI4sv = NULL;
PFNGLVERTEXATTRIBI4UBVPROC glVertexAttribI4ubv = NULL;
PFNGLVERTEXATTRIBI4USVPROC glVertexAttribI4usv = NULL;
PFNGLGETUNIFORMUIVPROC glGetUniformuiv = NULL;
PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation = NULL;
PFNGLGETFRAGDATALOCATIONPROC glGetFragDataLocation = NULL;
PFNGLUNIFORM1UIPROC glUniform1ui = NULL;
PFNGLUNIFORM2UIPROC glUniform2ui = NULL;
PFNGLUNIFORM3UIPROC glUniform3ui = NULL;
PFNGLUNIFORM4UIPROC glUniform4ui = NULL;
PFNGLUNIFORM1UIVPROC glUniform1uiv = NULL;
PFNGLUNIFORM2UIVPROC glUniform2uiv = NULL;
PFNGLUNIFORM3UIVPROC glUniform3uiv = NULL;
PFNGLUNIFORM4UIVPROC glUniform4uiv = NULL;
PFNGLTEXPARAMETERIIVPROC glTexParameterIiv = NULL;
PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv = NULL;
PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv = NULL;
PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv = NULL;
PFNGLCLEARBUFFERIVPROC glClearBufferiv = NULL;
PFNGLCLEARBUFFERUIVPROC glClearBufferuiv = NULL;
PFNGLCLEARBUFFERFVPROC glClearBufferfv = NULL;
PFNGLCLEARBUFFERFIPROC glClearBufferfi = NULL;
PFNGLGETSTRINGIPROC glGetStringi = NULL;

bool GL_VERSION_3_1_supported = false;
PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced = NULL;
PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced = NULL;
PFNGLTEXBUFFERPROC glTexBuffer = NULL;
PFNGLPRIMITIVERESTARTINDEXPROC glPrimitiveRestartIndex = NULL;

bool GL_VERSION_3_2_supported = false;
PFNGLGETINTEGER64I_VPROC glGetInteger64i_v = NULL;
PFNGLGETBUFFERPARAMETERI64VPROC glGetBufferParameteri64v = NULL;
PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture = NULL;

bool GL_VERSION_3_3_supported = false;
PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor = NULL;

bool GL_VERSION_4_0_supported = false;
PFNGLMINSAMPLESHADINGPROC glMinSampleShading = NULL;
PFNGLBLENDEQUATIONIPROC glBlendEquationi = NULL;
PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei = NULL;
PFNGLBLENDFUNCIPROC glBlendFunci = NULL;
PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei = NULL;

bool GL_VERSION_4_1_supported = false;
bool GL_VERSION_4_2_supported = false;
bool GL_VERSION_4_3_supported = false;
bool GL_ARB_multitexture_supported = false;
PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = NULL;
PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB = NULL;
PFNGLMULTITEXCOORD1DARBPROC glMultiTexCoord1dARB = NULL;
PFNGLMULTITEXCOORD1DVARBPROC glMultiTexCoord1dvARB = NULL;
PFNGLMULTITEXCOORD1FARBPROC glMultiTexCoord1fARB = NULL;
PFNGLMULTITEXCOORD1FVARBPROC glMultiTexCoord1fvARB = NULL;
PFNGLMULTITEXCOORD1IARBPROC glMultiTexCoord1iARB = NULL;
PFNGLMULTITEXCOORD1IVARBPROC glMultiTexCoord1ivARB = NULL;
PFNGLMULTITEXCOORD1SARBPROC glMultiTexCoord1sARB = NULL;
PFNGLMULTITEXCOORD1SVARBPROC glMultiTexCoord1svARB = NULL;
PFNGLMULTITEXCOORD2DARBPROC glMultiTexCoord2dARB = NULL;
PFNGLMULTITEXCOORD2DVARBPROC glMultiTexCoord2dvARB = NULL;
PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL;
PFNGLMULTITEXCOORD2FVARBPROC glMultiTexCoord2fvARB = NULL;
PFNGLMULTITEXCOORD2IARBPROC glMultiTexCoord2iARB = NULL;
PFNGLMULTITEXCOORD2IVARBPROC glMultiTexCoord2ivARB = NULL;
PFNGLMULTITEXCOORD2SARBPROC glMultiTexCoord2sARB = NULL;
PFNGLMULTITEXCOORD2SVARBPROC glMultiTexCoord2svARB = NULL;
PFNGLMULTITEXCOORD3DARBPROC glMultiTexCoord3dARB = NULL;
PFNGLMULTITEXCOORD3DVARBPROC glMultiTexCoord3dvARB = NULL;
PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3fARB = NULL;
PFNGLMULTITEXCOORD3FVARBPROC glMultiTexCoord3fvARB = NULL;
PFNGLMULTITEXCOORD3IARBPROC glMultiTexCoord3iARB = NULL;
PFNGLMULTITEXCOORD3IVARBPROC glMultiTexCoord3ivARB = NULL;
PFNGLMULTITEXCOORD3SARBPROC glMultiTexCoord3sARB = NULL;
PFNGLMULTITEXCOORD3SVARBPROC glMultiTexCoord3svARB = NULL;
PFNGLMULTITEXCOORD4DARBPROC glMultiTexCoord4dARB = NULL;
PFNGLMULTITEXCOORD4DVARBPROC glMultiTexCoord4dvARB = NULL;
PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4fARB = NULL;
PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB = NULL;
PFNGLMULTITEXCOORD4IARBPROC glMultiTexCoord4iARB = NULL;
PFNGLMULTITEXCOORD4IVARBPROC glMultiTexCoord4ivARB = NULL;
PFNGLMULTITEXCOORD4SARBPROC glMultiTexCoord4sARB = NULL;
PFNGLMULTITEXCOORD4SVARBPROC glMultiTexCoord4svARB = NULL;

bool GL_ARB_transpose_matrix_supported = false;
PFNGLLOADTRANSPOSEMATRIXFARBPROC glLoadTransposeMatrixfARB = NULL;
PFNGLLOADTRANSPOSEMATRIXDARBPROC glLoadTransposeMatrixdARB = NULL;
PFNGLMULTTRANSPOSEMATRIXFARBPROC glMultTransposeMatrixfARB = NULL;
PFNGLMULTTRANSPOSEMATRIXDARBPROC glMultTransposeMatrixdARB = NULL;

bool GL_ARB_multisample_supported = false;
PFNGLSAMPLECOVERAGEARBPROC glSampleCoverageARB = NULL;

bool GL_ARB_texture_env_add_supported = false;
bool GL_ARB_texture_cube_map_supported = false;
bool GL_ARB_texture_compression_supported = false;
PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glCompressedTexImage3DARB = NULL;
PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glCompressedTexImage2DARB = NULL;
PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glCompressedTexImage1DARB = NULL;
PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glCompressedTexSubImage3DARB = NULL;
PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glCompressedTexSubImage2DARB = NULL;
PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glCompressedTexSubImage1DARB = NULL;
PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glGetCompressedTexImageARB = NULL;

bool GL_ARB_texture_border_clamp_supported = false;
bool GL_ARB_point_parameters_supported = false;
PFNGLPOINTPARAMETERFARBPROC glPointParameterfARB = NULL;
PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvARB = NULL;

bool GL_ARB_vertex_blend_supported = false;
PFNGLWEIGHTBVARBPROC glWeightbvARB = NULL;
PFNGLWEIGHTSVARBPROC glWeightsvARB = NULL;
PFNGLWEIGHTIVARBPROC glWeightivARB = NULL;
PFNGLWEIGHTFVARBPROC glWeightfvARB = NULL;
PFNGLWEIGHTDVARBPROC glWeightdvARB = NULL;
PFNGLWEIGHTUBVARBPROC glWeightubvARB = NULL;
PFNGLWEIGHTUSVARBPROC glWeightusvARB = NULL;
PFNGLWEIGHTUIVARBPROC glWeightuivARB = NULL;
PFNGLWEIGHTPOINTERARBPROC glWeightPointerARB = NULL;
PFNGLVERTEXBLENDARBPROC glVertexBlendARB = NULL;

bool GL_ARB_matrix_palette_supported = false;
PFNGLCURRENTPALETTEMATRIXARBPROC glCurrentPaletteMatrixARB = NULL;
PFNGLMATRIXINDEXUBVARBPROC glMatrixIndexubvARB = NULL;
PFNGLMATRIXINDEXUSVARBPROC glMatrixIndexusvARB = NULL;
PFNGLMATRIXINDEXUIVARBPROC glMatrixIndexuivARB = NULL;
PFNGLMATRIXINDEXPOINTERARBPROC glMatrixIndexPointerARB = NULL;

bool GL_ARB_texture_env_combine_supported = false;
bool GL_ARB_texture_env_crossbar_supported = false;
bool GL_ARB_texture_env_dot3_supported = false;
bool GL_ARB_texture_mirrored_repeat_supported = false;
bool GL_ARB_depth_texture_supported = false;
bool GL_ARB_shadow_supported = false;
bool GL_ARB_shadow_ambient_supported = false;
bool GL_ARB_window_pos_supported = false;
PFNGLWINDOWPOS2DARBPROC glWindowPos2dARB = NULL;
PFNGLWINDOWPOS2DVARBPROC glWindowPos2dvARB = NULL;
PFNGLWINDOWPOS2FARBPROC glWindowPos2fARB = NULL;
PFNGLWINDOWPOS2FVARBPROC glWindowPos2fvARB = NULL;
PFNGLWINDOWPOS2IARBPROC glWindowPos2iARB = NULL;
PFNGLWINDOWPOS2IVARBPROC glWindowPos2ivARB = NULL;
PFNGLWINDOWPOS2SARBPROC glWindowPos2sARB = NULL;
PFNGLWINDOWPOS2SVARBPROC glWindowPos2svARB = NULL;
PFNGLWINDOWPOS3DARBPROC glWindowPos3dARB = NULL;
PFNGLWINDOWPOS3DVARBPROC glWindowPos3dvARB = NULL;
PFNGLWINDOWPOS3FARBPROC glWindowPos3fARB = NULL;
PFNGLWINDOWPOS3FVARBPROC glWindowPos3fvARB = NULL;
PFNGLWINDOWPOS3IARBPROC glWindowPos3iARB = NULL;
PFNGLWINDOWPOS3IVARBPROC glWindowPos3ivARB = NULL;
PFNGLWINDOWPOS3SARBPROC glWindowPos3sARB = NULL;
PFNGLWINDOWPOS3SVARBPROC glWindowPos3svARB = NULL;

bool GL_ARB_vertex_program_supported = false;
PFNGLVERTEXATTRIB1DARBPROC glVertexAttrib1dARB = NULL;
PFNGLVERTEXATTRIB1DVARBPROC glVertexAttrib1dvARB = NULL;
PFNGLVERTEXATTRIB1FARBPROC glVertexAttrib1fARB = NULL;
PFNGLVERTEXATTRIB1FVARBPROC glVertexAttrib1fvARB = NULL;
PFNGLVERTEXATTRIB1SARBPROC glVertexAttrib1sARB = NULL;
PFNGLVERTEXATTRIB1SVARBPROC glVertexAttrib1svARB = NULL;
PFNGLVERTEXATTRIB2DARBPROC glVertexAttrib2dARB = NULL;
PFNGLVERTEXATTRIB2DVARBPROC glVertexAttrib2dvARB = NULL;
PFNGLVERTEXATTRIB2FARBPROC glVertexAttrib2fARB = NULL;
PFNGLVERTEXATTRIB2FVARBPROC glVertexAttrib2fvARB = NULL;
PFNGLVERTEXATTRIB2SARBPROC glVertexAttrib2sARB = NULL;
PFNGLVERTEXATTRIB2SVARBPROC glVertexAttrib2svARB = NULL;
PFNGLVERTEXATTRIB3DARBPROC glVertexAttrib3dARB = NULL;
PFNGLVERTEXATTRIB3DVARBPROC glVertexAttrib3dvARB = NULL;
PFNGLVERTEXATTRIB3FARBPROC glVertexAttrib3fARB = NULL;
PFNGLVERTEXATTRIB3FVARBPROC glVertexAttrib3fvARB = NULL;
PFNGLVERTEXATTRIB3SARBPROC glVertexAttrib3sARB = NULL;
PFNGLVERTEXATTRIB3SVARBPROC glVertexAttrib3svARB = NULL;
PFNGLVERTEXATTRIB4NBVARBPROC glVertexAttrib4NbvARB = NULL;
PFNGLVERTEXATTRIB4NIVARBPROC glVertexAttrib4NivARB = NULL;
PFNGLVERTEXATTRIB4NSVARBPROC glVertexAttrib4NsvARB = NULL;
PFNGLVERTEXATTRIB4NUBARBPROC glVertexAttrib4NubARB = NULL;
PFNGLVERTEXATTRIB4NUBVARBPROC glVertexAttrib4NubvARB = NULL;
PFNGLVERTEXATTRIB4NUIVARBPROC glVertexAttrib4NuivARB = NULL;
PFNGLVERTEXATTRIB4NUSVARBPROC glVertexAttrib4NusvARB = NULL;
PFNGLVERTEXATTRIB4BVARBPROC glVertexAttrib4bvARB = NULL;
PFNGLVERTEXATTRIB4DARBPROC glVertexAttrib4dARB = NULL;
PFNGLVERTEXATTRIB4DVARBPROC glVertexAttrib4dvARB = NULL;
PFNGLVERTEXATTRIB4FARBPROC glVertexAttrib4fARB = NULL;
PFNGLVERTEXATTRIB4FVARBPROC glVertexAttrib4fvARB = NULL;
PFNGLVERTEXATTRIB4IVARBPROC glVertexAttrib4ivARB = NULL;
PFNGLVERTEXATTRIB4SARBPROC glVertexAttrib4sARB = NULL;
PFNGLVERTEXATTRIB4SVARBPROC glVertexAttrib4svARB = NULL;
PFNGLVERTEXATTRIB4UBVARBPROC glVertexAttrib4ubvARB = NULL;
PFNGLVERTEXATTRIB4UIVARBPROC glVertexAttrib4uivARB = NULL;
PFNGLVERTEXATTRIB4USVARBPROC glVertexAttrib4usvARB = NULL;
PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB = NULL;
PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB = NULL;
PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB = NULL;
PFNGLPROGRAMSTRINGARBPROC glProgramStringARB = NULL;
PFNGLBINDPROGRAMARBPROC glBindProgramARB = NULL;
PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB = NULL;
PFNGLGENPROGRAMSARBPROC glGenProgramsARB = NULL;
PFNGLPROGRAMENVPARAMETER4DARBPROC glProgramEnvParameter4dARB = NULL;
PFNGLPROGRAMENVPARAMETER4DVARBPROC glProgramEnvParameter4dvARB = NULL;
PFNGLPROGRAMENVPARAMETER4FARBPROC glProgramEnvParameter4fARB = NULL;
PFNGLPROGRAMENVPARAMETER4FVARBPROC glProgramEnvParameter4fvARB = NULL;
PFNGLPROGRAMLOCALPARAMETER4DARBPROC glProgramLocalParameter4dARB = NULL;
PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glProgramLocalParameter4dvARB = NULL;
PFNGLPROGRAMLOCALPARAMETER4FARBPROC glProgramLocalParameter4fARB = NULL;
PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB = NULL;
PFNGLGETPROGRAMENVPARAMETERDVARBPROC glGetProgramEnvParameterdvARB = NULL;
PFNGLGETPROGRAMENVPARAMETERFVARBPROC glGetProgramEnvParameterfvARB = NULL;
PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glGetProgramLocalParameterdvARB = NULL;
PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glGetProgramLocalParameterfvARB = NULL;
PFNGLGETPROGRAMIVARBPROC glGetProgramivARB = NULL;
PFNGLGETPROGRAMSTRINGARBPROC glGetProgramStringARB = NULL;
PFNGLGETVERTEXATTRIBDVARBPROC glGetVertexAttribdvARB = NULL;
PFNGLGETVERTEXATTRIBFVARBPROC glGetVertexAttribfvARB = NULL;
PFNGLGETVERTEXATTRIBIVARBPROC glGetVertexAttribivARB = NULL;
PFNGLGETVERTEXATTRIBPOINTERVARBPROC glGetVertexAttribPointervARB = NULL;
PFNGLISPROGRAMARBPROC glIsProgramARB = NULL;

bool GL_ARB_fragment_program_supported = false;
bool GL_ARB_vertex_buffer_object_supported = false;
PFNGLBINDBUFFERARBPROC glBindBufferARB = NULL;
PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB = NULL;
PFNGLGENBUFFERSARBPROC glGenBuffersARB = NULL;
PFNGLISBUFFERARBPROC glIsBufferARB = NULL;
PFNGLBUFFERDATAARBPROC glBufferDataARB = NULL;
PFNGLBUFFERSUBDATAARBPROC glBufferSubDataARB = NULL;
PFNGLGETBUFFERSUBDATAARBPROC glGetBufferSubDataARB = NULL;
PFNGLMAPBUFFERARBPROC glMapBufferARB = NULL;
PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB = NULL;
PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB = NULL;
PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB = NULL;

bool GL_ARB_occlusion_query_supported = false;
PFNGLGENQUERIESARBPROC glGenQueriesARB = NULL;
PFNGLDELETEQUERIESARBPROC glDeleteQueriesARB = NULL;
PFNGLISQUERYARBPROC glIsQueryARB = NULL;
PFNGLBEGINQUERYARBPROC glBeginQueryARB = NULL;
PFNGLENDQUERYARBPROC glEndQueryARB = NULL;
PFNGLGETQUERYIVARBPROC glGetQueryivARB = NULL;
PFNGLGETQUERYOBJECTIVARBPROC glGetQueryObjectivARB = NULL;
PFNGLGETQUERYOBJECTUIVARBPROC glGetQueryObjectuivARB = NULL;

bool GL_ARB_shader_objects_supported = false;
PFNGLDELETEOBJECTARBPROC glDeleteObjectARB = NULL;
PFNGLGETHANDLEARBPROC glGetHandleARB = NULL;
PFNGLDETACHOBJECTARBPROC glDetachObjectARB = NULL;
PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB = NULL;
PFNGLSHADERSOURCEARBPROC glShaderSourceARB = NULL;
PFNGLCOMPILESHADERARBPROC glCompileShaderARB = NULL;
PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = NULL;
PFNGLATTACHOBJECTARBPROC glAttachObjectARB = NULL;
PFNGLLINKPROGRAMARBPROC glLinkProgramARB = NULL;
PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = NULL;
PFNGLVALIDATEPROGRAMARBPROC glValidateProgramARB = NULL;
PFNGLUNIFORM1FARBPROC glUniform1fARB = NULL;
PFNGLUNIFORM2FARBPROC glUniform2fARB = NULL;
PFNGLUNIFORM3FARBPROC glUniform3fARB = NULL;
PFNGLUNIFORM4FARBPROC glUniform4fARB = NULL;
PFNGLUNIFORM1IARBPROC glUniform1iARB = NULL;
PFNGLUNIFORM2IARBPROC glUniform2iARB = NULL;
PFNGLUNIFORM3IARBPROC glUniform3iARB = NULL;
PFNGLUNIFORM4IARBPROC glUniform4iARB = NULL;
PFNGLUNIFORM1FVARBPROC glUniform1fvARB = NULL;
PFNGLUNIFORM2FVARBPROC glUniform2fvARB = NULL;
PFNGLUNIFORM3FVARBPROC glUniform3fvARB = NULL;
PFNGLUNIFORM4FVARBPROC glUniform4fvARB = NULL;
PFNGLUNIFORM1IVARBPROC glUniform1ivARB = NULL;
PFNGLUNIFORM2IVARBPROC glUniform2ivARB = NULL;
PFNGLUNIFORM3IVARBPROC glUniform3ivARB = NULL;
PFNGLUNIFORM4IVARBPROC glUniform4ivARB = NULL;
PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fvARB = NULL;
PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB = NULL;
PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB = NULL;
PFNGLGETOBJECTPARAMETERFVARBPROC glGetObjectParameterfvARB = NULL;
PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB = NULL;
PFNGLGETINFOLOGARBPROC glGetInfoLogARB = NULL;
PFNGLGETATTACHEDOBJECTSARBPROC glGetAttachedObjectsARB = NULL;
PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB = NULL;
PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB = NULL;
PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB = NULL;
PFNGLGETUNIFORMIVARBPROC glGetUniformivARB = NULL;
PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB = NULL;

bool GL_ARB_vertex_shader_supported = false;
PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB = NULL;
PFNGLGETACTIVEATTRIBARBPROC glGetActiveAttribARB = NULL;
PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB = NULL;

bool GL_ARB_fragment_shader_supported = false;
bool GL_ARB_shading_language_100_supported = false;
bool GL_ARB_texture_non_power_of_two_supported = false;
bool GL_ARB_point_sprite_supported = false;
bool GL_ARB_fragment_program_shadow_supported = false;
bool GL_ARB_draw_buffers_supported = false;
PFNGLDRAWBUFFERSARBPROC glDrawBuffersARB = NULL;

bool GL_ARB_texture_rectangle_supported = false;
bool GL_ARB_color_buffer_float_supported = false;
PFNGLCLAMPCOLORARBPROC glClampColorARB = NULL;

bool GL_ARB_half_float_pixel_supported = false;
bool GL_ARB_texture_float_supported = false;
bool GL_ARB_pixel_buffer_object_supported = false;
bool GL_ARB_depth_buffer_float_supported = false;
bool GL_ARB_draw_instanced_supported = false;
PFNGLDRAWARRAYSINSTANCEDARBPROC glDrawArraysInstancedARB = NULL;
PFNGLDRAWELEMENTSINSTANCEDARBPROC glDrawElementsInstancedARB = NULL;

bool GL_ARB_framebuffer_object_supported = false;
PFNGLISRENDERBUFFERPROC glIsRenderbuffer = NULL;
PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer = NULL;
PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers = NULL;
PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers = NULL;
PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage = NULL;
PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv = NULL;
PFNGLISFRAMEBUFFERPROC glIsFramebuffer = NULL;
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer = NULL;
PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = NULL;
PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers = NULL;
PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus = NULL;
PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D = NULL;
PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D = NULL;
PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D = NULL;
PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer = NULL;
PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv = NULL;
PFNGLGENERATEMIPMAPPROC glGenerateMipmap = NULL;
PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer = NULL;
PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample = NULL;
PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer = NULL;

bool GL_ARB_framebuffer_sRGB_supported = false;
bool GL_ARB_geometry_shader4_supported = false;
PFNGLPROGRAMPARAMETERIARBPROC glProgramParameteriARB = NULL;
PFNGLFRAMEBUFFERTEXTUREARBPROC glFramebufferTextureARB = NULL;
PFNGLFRAMEBUFFERTEXTURELAYERARBPROC glFramebufferTextureLayerARB = NULL;
PFNGLFRAMEBUFFERTEXTUREFACEARBPROC glFramebufferTextureFaceARB = NULL;

bool GL_ARB_half_float_vertex_supported = false;
bool GL_ARB_instanced_arrays_supported = false;
PFNGLVERTEXATTRIBDIVISORARBPROC glVertexAttribDivisorARB = NULL;

bool GL_ARB_map_buffer_range_supported = false;
PFNGLMAPBUFFERRANGEPROC glMapBufferRange = NULL;
PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange = NULL;

bool GL_ARB_texture_buffer_object_supported = false;
PFNGLTEXBUFFERARBPROC glTexBufferARB = NULL;

bool GL_ARB_texture_compression_rgtc_supported = false;
bool GL_ARB_texture_rg_supported = false;
bool GL_ARB_vertex_array_object_supported = false;
PFNGLBINDVERTEXARRAYPROC glBindVertexArray = NULL;
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays = NULL;
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays = NULL;
PFNGLISVERTEXARRAYPROC glIsVertexArray = NULL;

bool GL_ARB_uniform_buffer_object_supported = false;
PFNGLGETUNIFORMINDICESPROC glGetUniformIndices = NULL;
PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv = NULL;
PFNGLGETACTIVEUNIFORMNAMEPROC glGetActiveUniformName = NULL;
PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex = NULL;
PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv = NULL;
PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName = NULL;
PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding = NULL;

bool GL_ARB_compatibility_supported = false;
bool GL_ARB_copy_buffer_supported = false;
PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData = NULL;

bool GL_ARB_shader_texture_lod_supported = false;
bool GL_ARB_depth_clamp_supported = false;
bool GL_ARB_draw_elements_base_vertex_supported = false;
PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex = NULL;
PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex = NULL;
PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex = NULL;
PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex = NULL;

bool GL_ARB_fragment_coord_conventions_supported = false;
bool GL_ARB_provoking_vertex_supported = false;
PFNGLPROVOKINGVERTEXPROC glProvokingVertex = NULL;

bool GL_ARB_seamless_cube_map_supported = false;
bool GL_ARB_sync_supported = false;
PFNGLFENCESYNCPROC glFenceSync = NULL;
PFNGLISSYNCPROC glIsSync = NULL;
PFNGLDELETESYNCPROC glDeleteSync = NULL;
PFNGLCLIENTWAITSYNCPROC glClientWaitSync = NULL;
PFNGLWAITSYNCPROC glWaitSync = NULL;
PFNGLGETINTEGER64VPROC glGetInteger64v = NULL;
PFNGLGETSYNCIVPROC glGetSynciv = NULL;

bool GL_ARB_texture_multisample_supported = false;
PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample = NULL;
PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample = NULL;
PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv = NULL;
PFNGLSAMPLEMASKIPROC glSampleMaski = NULL;

bool GL_ARB_vertex_array_bgra_supported = false;
bool GL_ARB_draw_buffers_blend_supported = false;
PFNGLBLENDEQUATIONIARBPROC glBlendEquationiARB = NULL;
PFNGLBLENDEQUATIONSEPARATEIARBPROC glBlendEquationSeparateiARB = NULL;
PFNGLBLENDFUNCIARBPROC glBlendFunciARB = NULL;
PFNGLBLENDFUNCSEPARATEIARBPROC glBlendFuncSeparateiARB = NULL;

bool GL_ARB_sample_shading_supported = false;
PFNGLMINSAMPLESHADINGARBPROC glMinSampleShadingARB = NULL;

bool GL_ARB_texture_cube_map_array_supported = false;
bool GL_ARB_texture_gather_supported = false;
bool GL_ARB_texture_query_lod_supported = false;
bool GL_ARB_shading_language_include_supported = false;
PFNGLNAMEDSTRINGARBPROC glNamedStringARB = NULL;
PFNGLDELETENAMEDSTRINGARBPROC glDeleteNamedStringARB = NULL;
PFNGLCOMPILESHADERINCLUDEARBPROC glCompileShaderIncludeARB = NULL;
PFNGLISNAMEDSTRINGARBPROC glIsNamedStringARB = NULL;
PFNGLGETNAMEDSTRINGARBPROC glGetNamedStringARB = NULL;
PFNGLGETNAMEDSTRINGIVARBPROC glGetNamedStringivARB = NULL;

bool GL_ARB_texture_compression_bptc_supported = false;
bool GL_ARB_blend_func_extended_supported = false;
PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glBindFragDataLocationIndexed = NULL;
PFNGLGETFRAGDATAINDEXPROC glGetFragDataIndex = NULL;

bool GL_ARB_explicit_attrib_location_supported = false;
bool GL_ARB_occlusion_query2_supported = false;
bool GL_ARB_sampler_objects_supported = false;
PFNGLGENSAMPLERSPROC glGenSamplers = NULL;
PFNGLDELETESAMPLERSPROC glDeleteSamplers = NULL;
PFNGLISSAMPLERPROC glIsSampler = NULL;
PFNGLBINDSAMPLERPROC glBindSampler = NULL;
PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri = NULL;
PFNGLSAMPLERPARAMETERIVPROC glSamplerParameteriv = NULL;
PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf = NULL;
PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv = NULL;
PFNGLSAMPLERPARAMETERIIVPROC glSamplerParameterIiv = NULL;
PFNGLSAMPLERPARAMETERIUIVPROC glSamplerParameterIuiv = NULL;
PFNGLGETSAMPLERPARAMETERIVPROC glGetSamplerParameteriv = NULL;
PFNGLGETSAMPLERPARAMETERIIVPROC glGetSamplerParameterIiv = NULL;
PFNGLGETSAMPLERPARAMETERFVPROC glGetSamplerParameterfv = NULL;
PFNGLGETSAMPLERPARAMETERIUIVPROC glGetSamplerParameterIuiv = NULL;

bool GL_ARB_shader_bit_encoding_supported = false;
bool GL_ARB_texture_rgb10_a2ui_supported = false;
bool GL_ARB_texture_swizzle_supported = false;
bool GL_ARB_timer_query_supported = false;
PFNGLQUERYCOUNTERPROC glQueryCounter = NULL;
PFNGLGETQUERYOBJECTI64VPROC glGetQueryObjecti64v = NULL;
PFNGLGETQUERYOBJECTUI64VPROC glGetQueryObjectui64v = NULL;

bool GL_ARB_vertex_type_2_10_10_10_rev_supported = false;
PFNGLVERTEXP2UIPROC glVertexP2ui = NULL;
PFNGLVERTEXP2UIVPROC glVertexP2uiv = NULL;
PFNGLVERTEXP3UIPROC glVertexP3ui = NULL;
PFNGLVERTEXP3UIVPROC glVertexP3uiv = NULL;
PFNGLVERTEXP4UIPROC glVertexP4ui = NULL;
PFNGLVERTEXP4UIVPROC glVertexP4uiv = NULL;
PFNGLTEXCOORDP1UIPROC glTexCoordP1ui = NULL;
PFNGLTEXCOORDP1UIVPROC glTexCoordP1uiv = NULL;
PFNGLTEXCOORDP2UIPROC glTexCoordP2ui = NULL;
PFNGLTEXCOORDP2UIVPROC glTexCoordP2uiv = NULL;
PFNGLTEXCOORDP3UIPROC glTexCoordP3ui = NULL;
PFNGLTEXCOORDP3UIVPROC glTexCoordP3uiv = NULL;
PFNGLTEXCOORDP4UIPROC glTexCoordP4ui = NULL;
PFNGLTEXCOORDP4UIVPROC glTexCoordP4uiv = NULL;
PFNGLMULTITEXCOORDP1UIPROC glMultiTexCoordP1ui = NULL;
PFNGLMULTITEXCOORDP1UIVPROC glMultiTexCoordP1uiv = NULL;
PFNGLMULTITEXCOORDP2UIPROC glMultiTexCoordP2ui = NULL;
PFNGLMULTITEXCOORDP2UIVPROC glMultiTexCoordP2uiv = NULL;
PFNGLMULTITEXCOORDP3UIPROC glMultiTexCoordP3ui = NULL;
PFNGLMULTITEXCOORDP3UIVPROC glMultiTexCoordP3uiv = NULL;
PFNGLMULTITEXCOORDP4UIPROC glMultiTexCoordP4ui = NULL;
PFNGLMULTITEXCOORDP4UIVPROC glMultiTexCoordP4uiv = NULL;
PFNGLNORMALP3UIPROC glNormalP3ui = NULL;
PFNGLNORMALP3UIVPROC glNormalP3uiv = NULL;
PFNGLCOLORP3UIPROC glColorP3ui = NULL;
PFNGLCOLORP3UIVPROC glColorP3uiv = NULL;
PFNGLCOLORP4UIPROC glColorP4ui = NULL;
PFNGLCOLORP4UIVPROC glColorP4uiv = NULL;
PFNGLSECONDARYCOLORP3UIPROC glSecondaryColorP3ui = NULL;
PFNGLSECONDARYCOLORP3UIVPROC glSecondaryColorP3uiv = NULL;
PFNGLVERTEXATTRIBP1UIPROC glVertexAttribP1ui = NULL;
PFNGLVERTEXATTRIBP1UIVPROC glVertexAttribP1uiv = NULL;
PFNGLVERTEXATTRIBP2UIPROC glVertexAttribP2ui = NULL;
PFNGLVERTEXATTRIBP2UIVPROC glVertexAttribP2uiv = NULL;
PFNGLVERTEXATTRIBP3UIPROC glVertexAttribP3ui = NULL;
PFNGLVERTEXATTRIBP3UIVPROC glVertexAttribP3uiv = NULL;
PFNGLVERTEXATTRIBP4UIPROC glVertexAttribP4ui = NULL;
PFNGLVERTEXATTRIBP4UIVPROC glVertexAttribP4uiv = NULL;

bool GL_ARB_draw_indirect_supported = false;
PFNGLDRAWARRAYSINDIRECTPROC glDrawArraysIndirect = NULL;
PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect = NULL;

bool GL_ARB_gpu_shader5_supported = false;
bool GL_ARB_gpu_shader_fp64_supported = false;
PFNGLUNIFORM1DPROC glUniform1d = NULL;
PFNGLUNIFORM2DPROC glUniform2d = NULL;
PFNGLUNIFORM3DPROC glUniform3d = NULL;
PFNGLUNIFORM4DPROC glUniform4d = NULL;
PFNGLUNIFORM1DVPROC glUniform1dv = NULL;
PFNGLUNIFORM2DVPROC glUniform2dv = NULL;
PFNGLUNIFORM3DVPROC glUniform3dv = NULL;
PFNGLUNIFORM4DVPROC glUniform4dv = NULL;
PFNGLUNIFORMMATRIX2DVPROC glUniformMatrix2dv = NULL;
PFNGLUNIFORMMATRIX3DVPROC glUniformMatrix3dv = NULL;
PFNGLUNIFORMMATRIX4DVPROC glUniformMatrix4dv = NULL;
PFNGLUNIFORMMATRIX2X3DVPROC glUniformMatrix2x3dv = NULL;
PFNGLUNIFORMMATRIX2X4DVPROC glUniformMatrix2x4dv = NULL;
PFNGLUNIFORMMATRIX3X2DVPROC glUniformMatrix3x2dv = NULL;
PFNGLUNIFORMMATRIX3X4DVPROC glUniformMatrix3x4dv = NULL;
PFNGLUNIFORMMATRIX4X2DVPROC glUniformMatrix4x2dv = NULL;
PFNGLUNIFORMMATRIX4X3DVPROC glUniformMatrix4x3dv = NULL;
PFNGLGETUNIFORMDVPROC glGetUniformdv = NULL;

bool GL_ARB_shader_subroutine_supported = false;
PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glGetSubroutineUniformLocation = NULL;
PFNGLGETSUBROUTINEINDEXPROC glGetSubroutineIndex = NULL;
PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glGetActiveSubroutineUniformiv = NULL;
PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glGetActiveSubroutineUniformName = NULL;
PFNGLGETACTIVESUBROUTINENAMEPROC glGetActiveSubroutineName = NULL;
PFNGLUNIFORMSUBROUTINESUIVPROC glUniformSubroutinesuiv = NULL;
PFNGLGETUNIFORMSUBROUTINEUIVPROC glGetUniformSubroutineuiv = NULL;
PFNGLGETPROGRAMSTAGEIVPROC glGetProgramStageiv = NULL;

bool GL_ARB_tessellation_shader_supported = false;
PFNGLPATCHPARAMETERIPROC glPatchParameteri = NULL;
PFNGLPATCHPARAMETERFVPROC glPatchParameterfv = NULL;

bool GL_ARB_texture_buffer_object_rgb32_supported = false;
bool GL_ARB_transform_feedback2_supported = false;
PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback = NULL;
PFNGLDELETETRANSFORMFEEDBACKSPROC glDeleteTransformFeedbacks = NULL;
PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks = NULL;
PFNGLISTRANSFORMFEEDBACKPROC glIsTransformFeedback = NULL;
PFNGLPAUSETRANSFORMFEEDBACKPROC glPauseTransformFeedback = NULL;
PFNGLRESUMETRANSFORMFEEDBACKPROC glResumeTransformFeedback = NULL;
PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback = NULL;

bool GL_ARB_transform_feedback3_supported = false;
PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glDrawTransformFeedbackStream = NULL;
PFNGLBEGINQUERYINDEXEDPROC glBeginQueryIndexed = NULL;
PFNGLENDQUERYINDEXEDPROC glEndQueryIndexed = NULL;
PFNGLGETQUERYINDEXEDIVPROC glGetQueryIndexediv = NULL;

bool GL_ARB_ES2_compatibility_supported = false;
PFNGLRELEASESHADERCOMPILERPROC glReleaseShaderCompiler = NULL;
PFNGLSHADERBINARYPROC glShaderBinary = NULL;
PFNGLGETSHADERPRECISIONFORMATPROC glGetShaderPrecisionFormat = NULL;
PFNGLDEPTHRANGEFPROC glDepthRangef = NULL;
PFNGLCLEARDEPTHFPROC glClearDepthf = NULL;

bool GL_ARB_get_program_binary_supported = false;
PFNGLGETPROGRAMBINARYPROC glGetProgramBinary = NULL;
PFNGLPROGRAMBINARYPROC glProgramBinary = NULL;
PFNGLPROGRAMPARAMETERIPROC glProgramParameteri = NULL;

bool GL_ARB_separate_shader_objects_supported = false;
PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages = NULL;
PFNGLACTIVESHADERPROGRAMPROC glActiveShaderProgram = NULL;
PFNGLCREATESHADERPROGRAMVPROC glCreateShaderProgramv = NULL;
PFNGLBINDPROGRAMPIPELINEPROC glBindProgramPipeline = NULL;
PFNGLDELETEPROGRAMPIPELINESPROC glDeleteProgramPipelines = NULL;
PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines = NULL;
PFNGLISPROGRAMPIPELINEPROC glIsProgramPipeline = NULL;
PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv = NULL;
PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i = NULL;
PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv = NULL;
PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f = NULL;
PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv = NULL;
PFNGLPROGRAMUNIFORM1DPROC glProgramUniform1d = NULL;
PFNGLPROGRAMUNIFORM1DVPROC glProgramUniform1dv = NULL;
PFNGLPROGRAMUNIFORM1UIPROC glProgramUniform1ui = NULL;
PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv = NULL;
PFNGLPROGRAMUNIFORM2IPROC glProgramUniform2i = NULL;
PFNGLPROGRAMUNIFORM2IVPROC glProgramUniform2iv = NULL;
PFNGLPROGRAMUNIFORM2FPROC glProgramUniform2f = NULL;
PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv = NULL;
PFNGLPROGRAMUNIFORM2DPROC glProgramUniform2d = NULL;
PFNGLPROGRAMUNIFORM2DVPROC glProgramUniform2dv = NULL;
PFNGLPROGRAMUNIFORM2UIPROC glProgramUniform2ui = NULL;
PFNGLPROGRAMUNIFORM2UIVPROC glProgramUniform2uiv = NULL;
PFNGLPROGRAMUNIFORM3IPROC glProgramUniform3i = NULL;
PFNGLPROGRAMUNIFORM3IVPROC glProgramUniform3iv = NULL;
PFNGLPROGRAMUNIFORM3FPROC glProgramUniform3f = NULL;
PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv = NULL;
PFNGLPROGRAMUNIFORM3DPROC glProgramUniform3d = NULL;
PFNGLPROGRAMUNIFORM3DVPROC glProgramUniform3dv = NULL;
PFNGLPROGRAMUNIFORM3UIPROC glProgramUniform3ui = NULL;
PFNGLPROGRAMUNIFORM3UIVPROC glProgramUniform3uiv = NULL;
PFNGLPROGRAMUNIFORM4IPROC glProgramUniform4i = NULL;
PFNGLPROGRAMUNIFORM4IVPROC glProgramUniform4iv = NULL;
PFNGLPROGRAMUNIFORM4FPROC glProgramUniform4f = NULL;
PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv = NULL;
PFNGLPROGRAMUNIFORM4DPROC glProgramUniform4d = NULL;
PFNGLPROGRAMUNIFORM4DVPROC glProgramUniform4dv = NULL;
PFNGLPROGRAMUNIFORM4UIPROC glProgramUniform4ui = NULL;
PFNGLPROGRAMUNIFORM4UIVPROC glProgramUniform4uiv = NULL;
PFNGLPROGRAMUNIFORMMATRIX2FVPROC glProgramUniformMatrix2fv = NULL;
PFNGLPROGRAMUNIFORMMATRIX3FVPROC glProgramUniformMatrix3fv = NULL;
PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv = NULL;
PFNGLPROGRAMUNIFORMMATRIX2DVPROC glProgramUniformMatrix2dv = NULL;
PFNGLPROGRAMUNIFORMMATRIX3DVPROC glProgramUniformMatrix3dv = NULL;
PFNGLPROGRAMUNIFORMMATRIX4DVPROC glProgramUniformMatrix4dv = NULL;
PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glProgramUniformMatrix2x3fv = NULL;
PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glProgramUniformMatrix3x2fv = NULL;
PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glProgramUniformMatrix2x4fv = NULL;
PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glProgramUniformMatrix4x2fv = NULL;
PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glProgramUniformMatrix3x4fv = NULL;
PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glProgramUniformMatrix4x3fv = NULL;
PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glProgramUniformMatrix2x3dv = NULL;
PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glProgramUniformMatrix3x2dv = NULL;
PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glProgramUniformMatrix2x4dv = NULL;
PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glProgramUniformMatrix4x2dv = NULL;
PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glProgramUniformMatrix3x4dv = NULL;
PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glProgramUniformMatrix4x3dv = NULL;
PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline = NULL;
PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog = NULL;

bool GL_ARB_vertex_attrib_64bit_supported = false;
PFNGLVERTEXATTRIBL1DPROC glVertexAttribL1d = NULL;
PFNGLVERTEXATTRIBL2DPROC glVertexAttribL2d = NULL;
PFNGLVERTEXATTRIBL3DPROC glVertexAttribL3d = NULL;
PFNGLVERTEXATTRIBL4DPROC glVertexAttribL4d = NULL;
PFNGLVERTEXATTRIBL1DVPROC glVertexAttribL1dv = NULL;
PFNGLVERTEXATTRIBL2DVPROC glVertexAttribL2dv = NULL;
PFNGLVERTEXATTRIBL3DVPROC glVertexAttribL3dv = NULL;
PFNGLVERTEXATTRIBL4DVPROC glVertexAttribL4dv = NULL;
PFNGLVERTEXATTRIBLPOINTERPROC glVertexAttribLPointer = NULL;
PFNGLGETVERTEXATTRIBLDVPROC glGetVertexAttribLdv = NULL;

bool GL_ARB_viewport_array_supported = false;
PFNGLVIEWPORTARRAYVPROC glViewportArrayv = NULL;
PFNGLVIEWPORTINDEXEDFPROC glViewportIndexedf = NULL;
PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv = NULL;
PFNGLSCISSORARRAYVPROC glScissorArrayv = NULL;
PFNGLSCISSORINDEXEDPROC glScissorIndexed = NULL;
PFNGLSCISSORINDEXEDVPROC glScissorIndexedv = NULL;
PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv = NULL;
PFNGLDEPTHRANGEINDEXEDPROC glDepthRangeIndexed = NULL;
PFNGLGETFLOATI_VPROC glGetFloati_v = NULL;
PFNGLGETDOUBLEI_VPROC glGetDoublei_v = NULL;

bool GL_ARB_cl_event_supported = false;
PFNGLCREATESYNCFROMCLEVENTARBPROC glCreateSyncFromCLeventARB = NULL;

bool GL_ARB_debug_output_supported = false;
PFNGLDEBUGMESSAGECONTROLARBPROC glDebugMessageControlARB = NULL;
PFNGLDEBUGMESSAGEINSERTARBPROC glDebugMessageInsertARB = NULL;
PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB = NULL;
PFNGLGETDEBUGMESSAGELOGARBPROC glGetDebugMessageLogARB = NULL;

bool GL_ARB_robustness_supported = false;
PFNGLGETGRAPHICSRESETSTATUSARBPROC glGetGraphicsResetStatusARB = NULL;
PFNGLGETNTEXIMAGEARBPROC glGetnTexImageARB = NULL;
PFNGLREADNPIXELSARBPROC glReadnPixelsARB = NULL;
PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glGetnCompressedTexImageARB = NULL;
PFNGLGETNUNIFORMFVARBPROC glGetnUniformfvARB = NULL;
PFNGLGETNUNIFORMIVARBPROC glGetnUniformivARB = NULL;
PFNGLGETNUNIFORMUIVARBPROC glGetnUniformuivARB = NULL;
PFNGLGETNUNIFORMDVARBPROC glGetnUniformdvARB = NULL;

bool GL_ARB_shader_stencil_export_supported = false;
bool GL_ARB_base_instance_supported = false;
PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance = NULL;
PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glDrawElementsInstancedBaseInstance = NULL;
PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance = NULL;

bool GL_ARB_shading_language_420pack_supported = false;
bool GL_ARB_transform_feedback_instanced_supported = false;
PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glDrawTransformFeedbackInstanced = NULL;
PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glDrawTransformFeedbackStreamInstanced = NULL;

bool GL_ARB_compressed_texture_pixel_storage_supported = false;
bool GL_ARB_conservative_depth_supported = false;
bool GL_ARB_internalformat_query_supported = false;
PFNGLGETINTERNALFORMATIVPROC glGetInternalformativ = NULL;

bool GL_ARB_map_buffer_alignment_supported = false;
bool GL_ARB_shader_atomic_counters_supported = false;
PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glGetActiveAtomicCounterBufferiv = NULL;

bool GL_ARB_shader_image_load_store_supported = false;
PFNGLBINDIMAGETEXTUREPROC glBindImageTexture = NULL;
PFNGLMEMORYBARRIERPROC glMemoryBarrier = NULL;

bool GL_ARB_shading_language_packing_supported = false;
bool GL_ARB_texture_storage_supported = false;
PFNGLTEXSTORAGE1DPROC glTexStorage1D = NULL;
PFNGLTEXSTORAGE2DPROC glTexStorage2D = NULL;
PFNGLTEXSTORAGE3DPROC glTexStorage3D = NULL;
PFNGLTEXTURESTORAGE1DEXTPROC glTextureStorage1DEXT = NULL;
PFNGLTEXTURESTORAGE2DEXTPROC glTextureStorage2DEXT = NULL;
PFNGLTEXTURESTORAGE3DEXTPROC glTextureStorage3DEXT = NULL;

bool GL_KHR_texture_compression_astc_ldr_supported = false;
bool GL_KHR_debug_supported = false;
PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl = NULL;
PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert = NULL;
PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback = NULL;
PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog = NULL;
PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup = NULL;
PFNGLPOPDEBUGGROUPPROC glPopDebugGroup = NULL;
PFNGLOBJECTLABELPROC glObjectLabel = NULL;
PFNGLGETOBJECTLABELPROC glGetObjectLabel = NULL;
PFNGLOBJECTPTRLABELPROC glObjectPtrLabel = NULL;
PFNGLGETOBJECTPTRLABELPROC glGetObjectPtrLabel = NULL;

bool GL_ARB_arrays_of_arrays_supported = false;
bool GL_ARB_clear_buffer_object_supported = false;
PFNGLCLEARBUFFERDATAPROC glClearBufferData = NULL;
PFNGLCLEARBUFFERSUBDATAPROC glClearBufferSubData = NULL;
PFNGLCLEARNAMEDBUFFERDATAEXTPROC glClearNamedBufferDataEXT = NULL;
PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC glClearNamedBufferSubDataEXT = NULL;

bool GL_ARB_compute_shader_supported = false;
PFNGLDISPATCHCOMPUTEPROC glDispatchCompute = NULL;
PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect = NULL;

bool GL_ARB_copy_image_supported = false;
PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData = NULL;

bool GL_ARB_texture_view_supported = false;
PFNGLTEXTUREVIEWPROC glTextureView = NULL;

bool GL_ARB_vertex_attrib_binding_supported = false;
PFNGLBINDVERTEXBUFFERPROC glBindVertexBuffer = NULL;
PFNGLVERTEXATTRIBFORMATPROC glVertexAttribFormat = NULL;
PFNGLVERTEXATTRIBIFORMATPROC glVertexAttribIFormat = NULL;
PFNGLVERTEXATTRIBLFORMATPROC glVertexAttribLFormat = NULL;
PFNGLVERTEXATTRIBBINDINGPROC glVertexAttribBinding = NULL;
PFNGLVERTEXBINDINGDIVISORPROC glVertexBindingDivisor = NULL;
PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glVertexArrayBindVertexBufferEXT = NULL;
PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glVertexArrayVertexAttribFormatEXT = NULL;
PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glVertexArrayVertexAttribIFormatEXT = NULL;
PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glVertexArrayVertexAttribLFormatEXT = NULL;
PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glVertexArrayVertexAttribBindingEXT = NULL;
PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glVertexArrayVertexBindingDivisorEXT = NULL;

bool GL_ARB_robustness_isolation_supported = false;
bool GL_ARB_ES3_compatibility_supported = false;
bool GL_ARB_explicit_uniform_location_supported = false;
bool GL_ARB_fragment_layer_viewport_supported = false;
bool GL_ARB_framebuffer_no_attachments_supported = false;
PFNGLFRAMEBUFFERPARAMETERIPROC glFramebufferParameteri = NULL;
PFNGLGETFRAMEBUFFERPARAMETERIVPROC glGetFramebufferParameteriv = NULL;
PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glNamedFramebufferParameteriEXT = NULL;
PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC glGetNamedFramebufferParameterivEXT = NULL;

bool GL_ARB_internalformat_query2_supported = false;
PFNGLGETINTERNALFORMATI64VPROC glGetInternalformati64v = NULL;

bool GL_ARB_invalidate_subdata_supported = false;
PFNGLINVALIDATETEXSUBIMAGEPROC glInvalidateTexSubImage = NULL;
PFNGLINVALIDATETEXIMAGEPROC glInvalidateTexImage = NULL;
PFNGLINVALIDATEBUFFERSUBDATAPROC glInvalidateBufferSubData = NULL;
PFNGLINVALIDATEBUFFERDATAPROC glInvalidateBufferData = NULL;
PFNGLINVALIDATEFRAMEBUFFERPROC glInvalidateFramebuffer = NULL;
PFNGLINVALIDATESUBFRAMEBUFFERPROC glInvalidateSubFramebuffer = NULL;

bool GL_ARB_multi_draw_indirect_supported = false;
PFNGLMULTIDRAWARRAYSINDIRECTPROC glMultiDrawArraysIndirect = NULL;
PFNGLMULTIDRAWELEMENTSINDIRECTPROC glMultiDrawElementsIndirect = NULL;

bool GL_ARB_program_interface_query_supported = false;
PFNGLGETPROGRAMINTERFACEIVPROC glGetProgramInterfaceiv = NULL;
PFNGLGETPROGRAMRESOURCEINDEXPROC glGetProgramResourceIndex = NULL;
PFNGLGETPROGRAMRESOURCENAMEPROC glGetProgramResourceName = NULL;
PFNGLGETPROGRAMRESOURCEIVPROC glGetProgramResourceiv = NULL;
PFNGLGETPROGRAMRESOURCELOCATIONPROC glGetProgramResourceLocation = NULL;
PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glGetProgramResourceLocationIndex = NULL;

bool GL_ARB_robust_buffer_access_behavior_supported = false;
bool GL_ARB_shader_image_size_supported = false;
bool GL_ARB_shader_storage_buffer_object_supported = false;
PFNGLSHADERSTORAGEBLOCKBINDINGPROC glShaderStorageBlockBinding = NULL;

bool GL_ARB_stencil_texturing_supported = false;
bool GL_ARB_texture_buffer_range_supported = false;
PFNGLTEXBUFFERRANGEPROC glTexBufferRange = NULL;
PFNGLTEXTUREBUFFERRANGEEXTPROC glTextureBufferRangeEXT = NULL;

bool GL_ARB_texture_query_levels_supported = false;
bool GL_ARB_texture_storage_multisample_supported = false;
PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample = NULL;
PFNGLTEXSTORAGE3DMULTISAMPLEPROC glTexStorage3DMultisample = NULL;
PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC glTextureStorage2DMultisampleEXT = NULL;
PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC glTextureStorage3DMultisampleEXT = NULL;

bool GL_EXT_abgr_supported = false;
bool GL_EXT_blend_color_supported = false;
PFNGLBLENDCOLOREXTPROC glBlendColorEXT = NULL;

bool GL_EXT_polygon_offset_supported = false;
PFNGLPOLYGONOFFSETEXTPROC glPolygonOffsetEXT = NULL;

bool GL_EXT_texture_supported = false;
bool GL_EXT_texture3D_supported = false;
PFNGLTEXIMAGE3DEXTPROC glTexImage3DEXT = NULL;
PFNGLTEXSUBIMAGE3DEXTPROC glTexSubImage3DEXT = NULL;

bool GL_SGIS_texture_filter4_supported = false;
PFNGLGETTEXFILTERFUNCSGISPROC glGetTexFilterFuncSGIS = NULL;
PFNGLTEXFILTERFUNCSGISPROC glTexFilterFuncSGIS = NULL;

bool GL_EXT_subtexture_supported = false;
PFNGLTEXSUBIMAGE1DEXTPROC glTexSubImage1DEXT = NULL;
PFNGLTEXSUBIMAGE2DEXTPROC glTexSubImage2DEXT = NULL;

bool GL_EXT_copy_texture_supported = false;
PFNGLCOPYTEXIMAGE1DEXTPROC glCopyTexImage1DEXT = NULL;
PFNGLCOPYTEXIMAGE2DEXTPROC glCopyTexImage2DEXT = NULL;
PFNGLCOPYTEXSUBIMAGE1DEXTPROC glCopyTexSubImage1DEXT = NULL;
PFNGLCOPYTEXSUBIMAGE2DEXTPROC glCopyTexSubImage2DEXT = NULL;
PFNGLCOPYTEXSUBIMAGE3DEXTPROC glCopyTexSubImage3DEXT = NULL;

bool GL_EXT_histogram_supported = false;
PFNGLGETHISTOGRAMEXTPROC glGetHistogramEXT = NULL;
PFNGLGETHISTOGRAMPARAMETERFVEXTPROC glGetHistogramParameterfvEXT = NULL;
PFNGLGETHISTOGRAMPARAMETERIVEXTPROC glGetHistogramParameterivEXT = NULL;
PFNGLGETMINMAXEXTPROC glGetMinmaxEXT = NULL;
PFNGLGETMINMAXPARAMETERFVEXTPROC glGetMinmaxParameterfvEXT = NULL;
PFNGLGETMINMAXPARAMETERIVEXTPROC glGetMinmaxParameterivEXT = NULL;
PFNGLHISTOGRAMEXTPROC glHistogramEXT = NULL;
PFNGLMINMAXEXTPROC glMinmaxEXT = NULL;
PFNGLRESETHISTOGRAMEXTPROC glResetHistogramEXT = NULL;
PFNGLRESETMINMAXEXTPROC glResetMinmaxEXT = NULL;

bool GL_EXT_convolution_supported = false;
PFNGLCONVOLUTIONFILTER1DEXTPROC glConvolutionFilter1DEXT = NULL;
PFNGLCONVOLUTIONFILTER2DEXTPROC glConvolutionFilter2DEXT = NULL;
PFNGLCONVOLUTIONPARAMETERFEXTPROC glConvolutionParameterfEXT = NULL;
PFNGLCONVOLUTIONPARAMETERFVEXTPROC glConvolutionParameterfvEXT = NULL;
PFNGLCONVOLUTIONPARAMETERIEXTPROC glConvolutionParameteriEXT = NULL;
PFNGLCONVOLUTIONPARAMETERIVEXTPROC glConvolutionParameterivEXT = NULL;
PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC glCopyConvolutionFilter1DEXT = NULL;
PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC glCopyConvolutionFilter2DEXT = NULL;
PFNGLGETCONVOLUTIONFILTEREXTPROC glGetConvolutionFilterEXT = NULL;
PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC glGetConvolutionParameterfvEXT = NULL;
PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC glGetConvolutionParameterivEXT = NULL;
PFNGLGETSEPARABLEFILTEREXTPROC glGetSeparableFilterEXT = NULL;
PFNGLSEPARABLEFILTER2DEXTPROC glSeparableFilter2DEXT = NULL;

bool GL_SGI_color_matrix_supported = false;
bool GL_SGI_color_table_supported = false;
PFNGLCOLORTABLESGIPROC glColorTableSGI = NULL;
PFNGLCOLORTABLEPARAMETERFVSGIPROC glColorTableParameterfvSGI = NULL;
PFNGLCOLORTABLEPARAMETERIVSGIPROC glColorTableParameterivSGI = NULL;
PFNGLCOPYCOLORTABLESGIPROC glCopyColorTableSGI = NULL;
PFNGLGETCOLORTABLESGIPROC glGetColorTableSGI = NULL;
PFNGLGETCOLORTABLEPARAMETERFVSGIPROC glGetColorTableParameterfvSGI = NULL;
PFNGLGETCOLORTABLEPARAMETERIVSGIPROC glGetColorTableParameterivSGI = NULL;

bool GL_SGIX_pixel_texture_supported = false;
PFNGLPIXELTEXGENSGIXPROC glPixelTexGenSGIX = NULL;

bool GL_SGIS_pixel_texture_supported = false;
PFNGLPIXELTEXGENPARAMETERISGISPROC glPixelTexGenParameteriSGIS = NULL;
PFNGLPIXELTEXGENPARAMETERIVSGISPROC glPixelTexGenParameterivSGIS = NULL;
PFNGLPIXELTEXGENPARAMETERFSGISPROC glPixelTexGenParameterfSGIS = NULL;
PFNGLPIXELTEXGENPARAMETERFVSGISPROC glPixelTexGenParameterfvSGIS = NULL;
PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC glGetPixelTexGenParameterivSGIS = NULL;
PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC glGetPixelTexGenParameterfvSGIS = NULL;

bool GL_SGIS_texture4D_supported = false;
PFNGLTEXIMAGE4DSGISPROC glTexImage4DSGIS = NULL;
PFNGLTEXSUBIMAGE4DSGISPROC glTexSubImage4DSGIS = NULL;

bool GL_SGI_texture_color_table_supported = false;
bool GL_EXT_cmyka_supported = false;
bool GL_EXT_texture_object_supported = false;
PFNGLARETEXTURESRESIDENTEXTPROC glAreTexturesResidentEXT = NULL;
PFNGLBINDTEXTUREEXTPROC glBindTextureEXT = NULL;
PFNGLDELETETEXTURESEXTPROC glDeleteTexturesEXT = NULL;
PFNGLGENTEXTURESEXTPROC glGenTexturesEXT = NULL;
PFNGLISTEXTUREEXTPROC glIsTextureEXT = NULL;
PFNGLPRIORITIZETEXTURESEXTPROC glPrioritizeTexturesEXT = NULL;

bool GL_SGIS_detail_texture_supported = false;
PFNGLDETAILTEXFUNCSGISPROC glDetailTexFuncSGIS = NULL;
PFNGLGETDETAILTEXFUNCSGISPROC glGetDetailTexFuncSGIS = NULL;

bool GL_SGIS_sharpen_texture_supported = false;
PFNGLSHARPENTEXFUNCSGISPROC glSharpenTexFuncSGIS = NULL;
PFNGLGETSHARPENTEXFUNCSGISPROC glGetSharpenTexFuncSGIS = NULL;

bool GL_EXT_packed_pixels_supported = false;
bool GL_SGIS_texture_lod_supported = false;
bool GL_SGIS_multisample_supported = false;
PFNGLSAMPLEMASKSGISPROC glSampleMaskSGIS = NULL;
PFNGLSAMPLEPATTERNSGISPROC glSamplePatternSGIS = NULL;

bool GL_EXT_rescale_normal_supported = false;
bool GL_EXT_vertex_array_supported = false;
PFNGLARRAYELEMENTEXTPROC glArrayElementEXT = NULL;
PFNGLCOLORPOINTEREXTPROC glColorPointerEXT = NULL;
PFNGLDRAWARRAYSEXTPROC glDrawArraysEXT = NULL;
PFNGLEDGEFLAGPOINTEREXTPROC glEdgeFlagPointerEXT = NULL;
PFNGLGETPOINTERVEXTPROC glGetPointervEXT = NULL;
PFNGLINDEXPOINTEREXTPROC glIndexPointerEXT = NULL;
PFNGLNORMALPOINTEREXTPROC glNormalPointerEXT = NULL;
PFNGLTEXCOORDPOINTEREXTPROC glTexCoordPointerEXT = NULL;
PFNGLVERTEXPOINTEREXTPROC glVertexPointerEXT = NULL;

bool GL_EXT_misc_attribute_supported = false;
bool GL_SGIS_generate_mipmap_supported = false;
bool GL_SGIX_clipmap_supported = false;
bool GL_SGIX_shadow_supported = false;
bool GL_SGIS_texture_edge_clamp_supported = false;
bool GL_SGIS_texture_border_clamp_supported = false;
bool GL_EXT_blend_minmax_supported = false;
PFNGLBLENDEQUATIONEXTPROC glBlendEquationEXT = NULL;

bool GL_EXT_blend_subtract_supported = false;
bool GL_EXT_blend_logic_op_supported = false;
bool GL_SGIX_interlace_supported = false;
bool GL_SGIX_pixel_tiles_supported = false;
bool GL_SGIX_texture_select_supported = false;
bool GL_SGIX_sprite_supported = false;
PFNGLSPRITEPARAMETERFSGIXPROC glSpriteParameterfSGIX = NULL;
PFNGLSPRITEPARAMETERFVSGIXPROC glSpriteParameterfvSGIX = NULL;
PFNGLSPRITEPARAMETERISGIXPROC glSpriteParameteriSGIX = NULL;
PFNGLSPRITEPARAMETERIVSGIXPROC glSpriteParameterivSGIX = NULL;

bool GL_SGIX_texture_multi_buffer_supported = false;
bool GL_EXT_point_parameters_supported = false;
PFNGLPOINTPARAMETERFEXTPROC glPointParameterfEXT = NULL;
PFNGLPOINTPARAMETERFVEXTPROC glPointParameterfvEXT = NULL;

bool GL_SGIS_point_parameters_supported = false;
PFNGLPOINTPARAMETERFSGISPROC glPointParameterfSGIS = NULL;
PFNGLPOINTPARAMETERFVSGISPROC glPointParameterfvSGIS = NULL;

bool GL_SGIX_instruments_supported = false;
PFNGLGETINSTRUMENTSSGIXPROC glGetInstrumentsSGIX = NULL;
PFNGLINSTRUMENTSBUFFERSGIXPROC glInstrumentsBufferSGIX = NULL;
PFNGLPOLLINSTRUMENTSSGIXPROC glPollInstrumentsSGIX = NULL;
PFNGLREADINSTRUMENTSSGIXPROC glReadInstrumentsSGIX = NULL;
PFNGLSTARTINSTRUMENTSSGIXPROC glStartInstrumentsSGIX = NULL;
PFNGLSTOPINSTRUMENTSSGIXPROC glStopInstrumentsSGIX = NULL;

bool GL_SGIX_texture_scale_bias_supported = false;
bool GL_SGIX_framezoom_supported = false;
PFNGLFRAMEZOOMSGIXPROC glFrameZoomSGIX = NULL;

bool GL_SGIX_tag_sample_buffer_supported = false;
PFNGLTAGSAMPLEBUFFERSGIXPROC glTagSampleBufferSGIX = NULL;

bool GL_SGIX_polynomial_ffd_supported = false;
PFNGLDEFORMATIONMAP3DSGIXPROC glDeformationMap3dSGIX = NULL;
PFNGLDEFORMATIONMAP3FSGIXPROC glDeformationMap3fSGIX = NULL;
PFNGLDEFORMSGIXPROC glDeformSGIX = NULL;
PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC glLoadIdentityDeformationMapSGIX = NULL;

bool GL_SGIX_reference_plane_supported = false;
PFNGLREFERENCEPLANESGIXPROC glReferencePlaneSGIX = NULL;

bool GL_SGIX_flush_raster_supported = false;
PFNGLFLUSHRASTERSGIXPROC glFlushRasterSGIX = NULL;

bool GL_SGIX_depth_texture_supported = false;
bool GL_SGIS_fog_function_supported = false;
PFNGLFOGFUNCSGISPROC glFogFuncSGIS = NULL;
PFNGLGETFOGFUNCSGISPROC glGetFogFuncSGIS = NULL;

bool GL_SGIX_fog_offset_supported = false;
bool GL_HP_image_transform_supported = false;
PFNGLIMAGETRANSFORMPARAMETERIHPPROC glImageTransformParameteriHP = NULL;
PFNGLIMAGETRANSFORMPARAMETERFHPPROC glImageTransformParameterfHP = NULL;
PFNGLIMAGETRANSFORMPARAMETERIVHPPROC glImageTransformParameterivHP = NULL;
PFNGLIMAGETRANSFORMPARAMETERFVHPPROC glImageTransformParameterfvHP = NULL;
PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC glGetImageTransformParameterivHP = NULL;
PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC glGetImageTransformParameterfvHP = NULL;

bool GL_HP_convolution_border_modes_supported = false;
bool GL_SGIX_texture_add_env_supported = false;
bool GL_EXT_color_subtable_supported = false;
PFNGLCOLORSUBTABLEEXTPROC glColorSubTableEXT = NULL;
PFNGLCOPYCOLORSUBTABLEEXTPROC glCopyColorSubTableEXT = NULL;

bool GL_PGI_vertex_hints_supported = false;
bool GL_PGI_misc_hints_supported = false;
PFNGLHINTPGIPROC glHintPGI = NULL;

bool GL_EXT_paletted_texture_supported = false;
PFNGLCOLORTABLEEXTPROC glColorTableEXT = NULL;
PFNGLGETCOLORTABLEEXTPROC glGetColorTableEXT = NULL;
PFNGLGETCOLORTABLEPARAMETERIVEXTPROC glGetColorTableParameterivEXT = NULL;
PFNGLGETCOLORTABLEPARAMETERFVEXTPROC glGetColorTableParameterfvEXT = NULL;

bool GL_EXT_clip_volume_hint_supported = false;
bool GL_SGIX_list_priority_supported = false;
PFNGLGETLISTPARAMETERFVSGIXPROC glGetListParameterfvSGIX = NULL;
PFNGLGETLISTPARAMETERIVSGIXPROC glGetListParameterivSGIX = NULL;
PFNGLLISTPARAMETERFSGIXPROC glListParameterfSGIX = NULL;
PFNGLLISTPARAMETERFVSGIXPROC glListParameterfvSGIX = NULL;
PFNGLLISTPARAMETERISGIXPROC glListParameteriSGIX = NULL;
PFNGLLISTPARAMETERIVSGIXPROC glListParameterivSGIX = NULL;

bool GL_SGIX_ir_instrument1_supported = false;
bool GL_SGIX_calligraphic_fragment_supported = false;
bool GL_SGIX_texture_lod_bias_supported = false;
bool GL_SGIX_shadow_ambient_supported = false;
bool GL_EXT_index_texture_supported = false;
bool GL_EXT_index_material_supported = false;
PFNGLINDEXMATERIALEXTPROC glIndexMaterialEXT = NULL;

bool GL_EXT_index_func_supported = false;
PFNGLINDEXFUNCEXTPROC glIndexFuncEXT = NULL;

bool GL_EXT_index_array_formats_supported = false;
bool GL_EXT_compiled_vertex_array_supported = false;
PFNGLLOCKARRAYSEXTPROC glLockArraysEXT = NULL;
PFNGLUNLOCKARRAYSEXTPROC glUnlockArraysEXT = NULL;

bool GL_EXT_cull_vertex_supported = false;
PFNGLCULLPARAMETERDVEXTPROC glCullParameterdvEXT = NULL;
PFNGLCULLPARAMETERFVEXTPROC glCullParameterfvEXT = NULL;

bool GL_SGIX_ycrcb_supported = false;
bool GL_SGIX_fragment_lighting_supported = false;
PFNGLFRAGMENTCOLORMATERIALSGIXPROC glFragmentColorMaterialSGIX = NULL;
PFNGLFRAGMENTLIGHTFSGIXPROC glFragmentLightfSGIX = NULL;
PFNGLFRAGMENTLIGHTFVSGIXPROC glFragmentLightfvSGIX = NULL;
PFNGLFRAGMENTLIGHTISGIXPROC glFragmentLightiSGIX = NULL;
PFNGLFRAGMENTLIGHTIVSGIXPROC glFragmentLightivSGIX = NULL;
PFNGLFRAGMENTLIGHTMODELFSGIXPROC glFragmentLightModelfSGIX = NULL;
PFNGLFRAGMENTLIGHTMODELFVSGIXPROC glFragmentLightModelfvSGIX = NULL;
PFNGLFRAGMENTLIGHTMODELISGIXPROC glFragmentLightModeliSGIX = NULL;
PFNGLFRAGMENTLIGHTMODELIVSGIXPROC glFragmentLightModelivSGIX = NULL;
PFNGLFRAGMENTMATERIALFSGIXPROC glFragmentMaterialfSGIX = NULL;
PFNGLFRAGMENTMATERIALFVSGIXPROC glFragmentMaterialfvSGIX = NULL;
PFNGLFRAGMENTMATERIALISGIXPROC glFragmentMaterialiSGIX = NULL;
PFNGLFRAGMENTMATERIALIVSGIXPROC glFragmentMaterialivSGIX = NULL;
PFNGLGETFRAGMENTLIGHTFVSGIXPROC glGetFragmentLightfvSGIX = NULL;
PFNGLGETFRAGMENTLIGHTIVSGIXPROC glGetFragmentLightivSGIX = NULL;
PFNGLGETFRAGMENTMATERIALFVSGIXPROC glGetFragmentMaterialfvSGIX = NULL;
PFNGLGETFRAGMENTMATERIALIVSGIXPROC glGetFragmentMaterialivSGIX = NULL;
PFNGLLIGHTENVISGIXPROC glLightEnviSGIX = NULL;

bool GL_IBM_rasterpos_clip_supported = false;
bool GL_HP_texture_lighting_supported = false;
bool GL_EXT_draw_range_elements_supported = false;
PFNGLDRAWRANGEELEMENTSEXTPROC glDrawRangeElementsEXT = NULL;

bool GL_WIN_phong_shading_supported = false;
bool GL_WIN_specular_fog_supported = false;
bool GL_EXT_light_texture_supported = false;
PFNGLAPPLYTEXTUREEXTPROC glApplyTextureEXT = NULL;
PFNGLTEXTURELIGHTEXTPROC glTextureLightEXT = NULL;
PFNGLTEXTUREMATERIALEXTPROC glTextureMaterialEXT = NULL;

bool GL_SGIX_blend_alpha_minmax_supported = false;
bool GL_EXT_bgra_supported = false;
bool GL_SGIX_async_supported = false;
PFNGLASYNCMARKERSGIXPROC glAsyncMarkerSGIX = NULL;
PFNGLFINISHASYNCSGIXPROC glFinishAsyncSGIX = NULL;
PFNGLPOLLASYNCSGIXPROC glPollAsyncSGIX = NULL;
PFNGLGENASYNCMARKERSSGIXPROC glGenAsyncMarkersSGIX = NULL;
PFNGLDELETEASYNCMARKERSSGIXPROC glDeleteAsyncMarkersSGIX = NULL;
PFNGLISASYNCMARKERSGIXPROC glIsAsyncMarkerSGIX = NULL;

bool GL_SGIX_async_pixel_supported = false;
bool GL_SGIX_async_histogram_supported = false;
bool GL_INTEL_parallel_arrays_supported = false;
PFNGLVERTEXPOINTERVINTELPROC glVertexPointervINTEL = NULL;
PFNGLNORMALPOINTERVINTELPROC glNormalPointervINTEL = NULL;
PFNGLCOLORPOINTERVINTELPROC glColorPointervINTEL = NULL;
PFNGLTEXCOORDPOINTERVINTELPROC glTexCoordPointervINTEL = NULL;

bool GL_HP_occlusion_test_supported = false;
bool GL_EXT_pixel_transform_supported = false;
PFNGLPIXELTRANSFORMPARAMETERIEXTPROC glPixelTransformParameteriEXT = NULL;
PFNGLPIXELTRANSFORMPARAMETERFEXTPROC glPixelTransformParameterfEXT = NULL;
PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC glPixelTransformParameterivEXT = NULL;
PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC glPixelTransformParameterfvEXT = NULL;
PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC glGetPixelTransformParameterivEXT = NULL;
PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC glGetPixelTransformParameterfvEXT = NULL;

bool GL_EXT_pixel_transform_color_table_supported = false;
bool GL_EXT_shared_texture_palette_supported = false;
bool GL_EXT_separate_specular_color_supported = false;
bool GL_EXT_secondary_color_supported = false;
PFNGLSECONDARYCOLOR3BEXTPROC glSecondaryColor3bEXT = NULL;
PFNGLSECONDARYCOLOR3BVEXTPROC glSecondaryColor3bvEXT = NULL;
PFNGLSECONDARYCOLOR3DEXTPROC glSecondaryColor3dEXT = NULL;
PFNGLSECONDARYCOLOR3DVEXTPROC glSecondaryColor3dvEXT = NULL;
PFNGLSECONDARYCOLOR3FEXTPROC glSecondaryColor3fEXT = NULL;
PFNGLSECONDARYCOLOR3FVEXTPROC glSecondaryColor3fvEXT = NULL;
PFNGLSECONDARYCOLOR3IEXTPROC glSecondaryColor3iEXT = NULL;
PFNGLSECONDARYCOLOR3IVEXTPROC glSecondaryColor3ivEXT = NULL;
PFNGLSECONDARYCOLOR3SEXTPROC glSecondaryColor3sEXT = NULL;
PFNGLSECONDARYCOLOR3SVEXTPROC glSecondaryColor3svEXT = NULL;
PFNGLSECONDARYCOLOR3UBEXTPROC glSecondaryColor3ubEXT = NULL;
PFNGLSECONDARYCOLOR3UBVEXTPROC glSecondaryColor3ubvEXT = NULL;
PFNGLSECONDARYCOLOR3UIEXTPROC glSecondaryColor3uiEXT = NULL;
PFNGLSECONDARYCOLOR3UIVEXTPROC glSecondaryColor3uivEXT = NULL;
PFNGLSECONDARYCOLOR3USEXTPROC glSecondaryColor3usEXT = NULL;
PFNGLSECONDARYCOLOR3USVEXTPROC glSecondaryColor3usvEXT = NULL;
PFNGLSECONDARYCOLORPOINTEREXTPROC glSecondaryColorPointerEXT = NULL;

bool GL_EXT_texture_perturb_normal_supported = false;
PFNGLTEXTURENORMALEXTPROC glTextureNormalEXT = NULL;

bool GL_EXT_multi_draw_arrays_supported = false;
PFNGLMULTIDRAWARRAYSEXTPROC glMultiDrawArraysEXT = NULL;
PFNGLMULTIDRAWELEMENTSEXTPROC glMultiDrawElementsEXT = NULL;

bool GL_EXT_fog_coord_supported = false;
PFNGLFOGCOORDFEXTPROC glFogCoordfEXT = NULL;
PFNGLFOGCOORDFVEXTPROC glFogCoordfvEXT = NULL;
PFNGLFOGCOORDDEXTPROC glFogCoorddEXT = NULL;
PFNGLFOGCOORDDVEXTPROC glFogCoorddvEXT = NULL;
PFNGLFOGCOORDPOINTEREXTPROC glFogCoordPointerEXT = NULL;

bool GL_REND_screen_coordinates_supported = false;
bool GL_EXT_coordinate_frame_supported = false;
PFNGLTANGENT3BEXTPROC glTangent3bEXT = NULL;
PFNGLTANGENT3BVEXTPROC glTangent3bvEXT = NULL;
PFNGLTANGENT3DEXTPROC glTangent3dEXT = NULL;
PFNGLTANGENT3DVEXTPROC glTangent3dvEXT = NULL;
PFNGLTANGENT3FEXTPROC glTangent3fEXT = NULL;
PFNGLTANGENT3FVEXTPROC glTangent3fvEXT = NULL;
PFNGLTANGENT3IEXTPROC glTangent3iEXT = NULL;
PFNGLTANGENT3IVEXTPROC glTangent3ivEXT = NULL;
PFNGLTANGENT3SEXTPROC glTangent3sEXT = NULL;
PFNGLTANGENT3SVEXTPROC glTangent3svEXT = NULL;
PFNGLBINORMAL3BEXTPROC glBinormal3bEXT = NULL;
PFNGLBINORMAL3BVEXTPROC glBinormal3bvEXT = NULL;
PFNGLBINORMAL3DEXTPROC glBinormal3dEXT = NULL;
PFNGLBINORMAL3DVEXTPROC glBinormal3dvEXT = NULL;
PFNGLBINORMAL3FEXTPROC glBinormal3fEXT = NULL;
PFNGLBINORMAL3FVEXTPROC glBinormal3fvEXT = NULL;
PFNGLBINORMAL3IEXTPROC glBinormal3iEXT = NULL;
PFNGLBINORMAL3IVEXTPROC glBinormal3ivEXT = NULL;
PFNGLBINORMAL3SEXTPROC glBinormal3sEXT = NULL;
PFNGLBINORMAL3SVEXTPROC glBinormal3svEXT = NULL;
PFNGLTANGENTPOINTEREXTPROC glTangentPointerEXT = NULL;
PFNGLBINORMALPOINTEREXTPROC glBinormalPointerEXT = NULL;

bool GL_EXT_texture_env_combine_supported = false;
bool GL_APPLE_specular_vector_supported = false;
bool GL_APPLE_transform_hint_supported = false;
bool GL_SGIX_fog_scale_supported = false;
bool GL_SUNX_constant_data_supported = false;
PFNGLFINISHTEXTURESUNXPROC glFinishTextureSUNX = NULL;

bool GL_SUN_global_alpha_supported = false;
PFNGLGLOBALALPHAFACTORBSUNPROC glGlobalAlphaFactorbSUN = NULL;
PFNGLGLOBALALPHAFACTORSSUNPROC glGlobalAlphaFactorsSUN = NULL;
PFNGLGLOBALALPHAFACTORISUNPROC glGlobalAlphaFactoriSUN = NULL;
PFNGLGLOBALALPHAFACTORFSUNPROC glGlobalAlphaFactorfSUN = NULL;
PFNGLGLOBALALPHAFACTORDSUNPROC glGlobalAlphaFactordSUN = NULL;
PFNGLGLOBALALPHAFACTORUBSUNPROC glGlobalAlphaFactorubSUN = NULL;
PFNGLGLOBALALPHAFACTORUSSUNPROC glGlobalAlphaFactorusSUN = NULL;
PFNGLGLOBALALPHAFACTORUISUNPROC glGlobalAlphaFactoruiSUN = NULL;

bool GL_SUN_triangle_list_supported = false;
PFNGLREPLACEMENTCODEUISUNPROC glReplacementCodeuiSUN = NULL;
PFNGLREPLACEMENTCODEUSSUNPROC glReplacementCodeusSUN = NULL;
PFNGLREPLACEMENTCODEUBSUNPROC glReplacementCodeubSUN = NULL;
PFNGLREPLACEMENTCODEUIVSUNPROC glReplacementCodeuivSUN = NULL;
PFNGLREPLACEMENTCODEUSVSUNPROC glReplacementCodeusvSUN = NULL;
PFNGLREPLACEMENTCODEUBVSUNPROC glReplacementCodeubvSUN = NULL;
PFNGLREPLACEMENTCODEPOINTERSUNPROC glReplacementCodePointerSUN = NULL;

bool GL_SUN_vertex_supported = false;
PFNGLCOLOR4UBVERTEX2FSUNPROC glColor4ubVertex2fSUN = NULL;
PFNGLCOLOR4UBVERTEX2FVSUNPROC glColor4ubVertex2fvSUN = NULL;
PFNGLCOLOR4UBVERTEX3FSUNPROC glColor4ubVertex3fSUN = NULL;
PFNGLCOLOR4UBVERTEX3FVSUNPROC glColor4ubVertex3fvSUN = NULL;
PFNGLCOLOR3FVERTEX3FSUNPROC glColor3fVertex3fSUN = NULL;
PFNGLCOLOR3FVERTEX3FVSUNPROC glColor3fVertex3fvSUN = NULL;
PFNGLNORMAL3FVERTEX3FSUNPROC glNormal3fVertex3fSUN = NULL;
PFNGLNORMAL3FVERTEX3FVSUNPROC glNormal3fVertex3fvSUN = NULL;
PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC glColor4fNormal3fVertex3fSUN = NULL;
PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC glColor4fNormal3fVertex3fvSUN = NULL;
PFNGLTEXCOORD2FVERTEX3FSUNPROC glTexCoord2fVertex3fSUN = NULL;
PFNGLTEXCOORD2FVERTEX3FVSUNPROC glTexCoord2fVertex3fvSUN = NULL;
PFNGLTEXCOORD4FVERTEX4FSUNPROC glTexCoord4fVertex4fSUN = NULL;
PFNGLTEXCOORD4FVERTEX4FVSUNPROC glTexCoord4fVertex4fvSUN = NULL;
PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC glTexCoord2fColor4ubVertex3fSUN = NULL;
PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC glTexCoord2fColor4ubVertex3fvSUN = NULL;
PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC glTexCoord2fColor3fVertex3fSUN = NULL;
PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC glTexCoord2fColor3fVertex3fvSUN = NULL;
PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC glTexCoord2fNormal3fVertex3fSUN = NULL;
PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glTexCoord2fNormal3fVertex3fvSUN = NULL;
PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glTexCoord2fColor4fNormal3fVertex3fSUN = NULL;
PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glTexCoord2fColor4fNormal3fVertex3fvSUN = NULL;
PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC glTexCoord4fColor4fNormal3fVertex4fSUN = NULL;
PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC glTexCoord4fColor4fNormal3fVertex4fvSUN = NULL;
PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC glReplacementCodeuiVertex3fSUN = NULL;
PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC glReplacementCodeuiVertex3fvSUN = NULL;
PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC glReplacementCodeuiColor4ubVertex3fSUN = NULL;
PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC glReplacementCodeuiColor4ubVertex3fvSUN = NULL;
PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC glReplacementCodeuiColor3fVertex3fSUN = NULL;
PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC glReplacementCodeuiColor3fVertex3fvSUN = NULL;
PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC glReplacementCodeuiNormal3fVertex3fSUN = NULL;
PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC glReplacementCodeuiNormal3fVertex3fvSUN = NULL;
PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC glReplacementCodeuiColor4fNormal3fVertex3fSUN = NULL;
PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC glReplacementCodeuiColor4fNormal3fVertex3fvSUN = NULL;
PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC glReplacementCodeuiTexCoord2fVertex3fSUN = NULL;
PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC glReplacementCodeuiTexCoord2fVertex3fvSUN = NULL;
PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = NULL;
PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = NULL;
PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = NULL;
PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = NULL;

bool GL_EXT_blend_func_separate_supported = false;
PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT = NULL;

bool GL_INGR_blend_func_separate_supported = false;
PFNGLBLENDFUNCSEPARATEINGRPROC glBlendFuncSeparateINGR = NULL;

bool GL_INGR_color_clamp_supported = false;
bool GL_INGR_interlace_read_supported = false;
bool GL_EXT_stencil_wrap_supported = false;
bool GL_EXT_422_pixels_supported = false;
bool GL_NV_texgen_reflection_supported = false;
bool GL_SUN_convolution_border_modes_supported = false;
bool GL_EXT_texture_env_add_supported = false;
bool GL_EXT_texture_lod_bias_supported = false;
bool GL_EXT_texture_filter_anisotropic_supported = false;
bool GL_EXT_vertex_weighting_supported = false;
PFNGLVERTEXWEIGHTFEXTPROC glVertexWeightfEXT = NULL;
PFNGLVERTEXWEIGHTFVEXTPROC glVertexWeightfvEXT = NULL;
PFNGLVERTEXWEIGHTPOINTEREXTPROC glVertexWeightPointerEXT = NULL;

bool GL_NV_light_max_exponent_supported = false;
bool GL_NV_vertex_array_range_supported = false;
PFNGLFLUSHVERTEXARRAYRANGENVPROC glFlushVertexArrayRangeNV = NULL;
PFNGLVERTEXARRAYRANGENVPROC glVertexArrayRangeNV = NULL;

bool GL_NV_register_combiners_supported = false;
PFNGLCOMBINERPARAMETERFVNVPROC glCombinerParameterfvNV = NULL;
PFNGLCOMBINERPARAMETERFNVPROC glCombinerParameterfNV = NULL;
PFNGLCOMBINERPARAMETERIVNVPROC glCombinerParameterivNV = NULL;
PFNGLCOMBINERPARAMETERINVPROC glCombinerParameteriNV = NULL;
PFNGLCOMBINERINPUTNVPROC glCombinerInputNV = NULL;
PFNGLCOMBINEROUTPUTNVPROC glCombinerOutputNV = NULL;
PFNGLFINALCOMBINERINPUTNVPROC glFinalCombinerInputNV = NULL;
PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC glGetCombinerInputParameterfvNV = NULL;
PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC glGetCombinerInputParameterivNV = NULL;
PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC glGetCombinerOutputParameterfvNV = NULL;
PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC glGetCombinerOutputParameterivNV = NULL;
PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC glGetFinalCombinerInputParameterfvNV = NULL;
PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC glGetFinalCombinerInputParameterivNV = NULL;

bool GL_NV_fog_distance_supported = false;
bool GL_NV_texgen_emboss_supported = false;
bool GL_NV_blend_square_supported = false;
bool GL_NV_texture_env_combine4_supported = false;
bool GL_MESA_resize_buffers_supported = false;
PFNGLRESIZEBUFFERSMESAPROC glResizeBuffersMESA = NULL;

bool GL_MESA_window_pos_supported = false;
PFNGLWINDOWPOS2DMESAPROC glWindowPos2dMESA = NULL;
PFNGLWINDOWPOS2DVMESAPROC glWindowPos2dvMESA = NULL;
PFNGLWINDOWPOS2FMESAPROC glWindowPos2fMESA = NULL;
PFNGLWINDOWPOS2FVMESAPROC glWindowPos2fvMESA = NULL;
PFNGLWINDOWPOS2IMESAPROC glWindowPos2iMESA = NULL;
PFNGLWINDOWPOS2IVMESAPROC glWindowPos2ivMESA = NULL;
PFNGLWINDOWPOS2SMESAPROC glWindowPos2sMESA = NULL;
PFNGLWINDOWPOS2SVMESAPROC glWindowPos2svMESA = NULL;
PFNGLWINDOWPOS3DMESAPROC glWindowPos3dMESA = NULL;
PFNGLWINDOWPOS3DVMESAPROC glWindowPos3dvMESA = NULL;
PFNGLWINDOWPOS3FMESAPROC glWindowPos3fMESA = NULL;
PFNGLWINDOWPOS3FVMESAPROC glWindowPos3fvMESA = NULL;
PFNGLWINDOWPOS3IMESAPROC glWindowPos3iMESA = NULL;
PFNGLWINDOWPOS3IVMESAPROC glWindowPos3ivMESA = NULL;
PFNGLWINDOWPOS3SMESAPROC glWindowPos3sMESA = NULL;
PFNGLWINDOWPOS3SVMESAPROC glWindowPos3svMESA = NULL;
PFNGLWINDOWPOS4DMESAPROC glWindowPos4dMESA = NULL;
PFNGLWINDOWPOS4DVMESAPROC glWindowPos4dvMESA = NULL;
PFNGLWINDOWPOS4FMESAPROC glWindowPos4fMESA = NULL;
PFNGLWINDOWPOS4FVMESAPROC glWindowPos4fvMESA = NULL;
PFNGLWINDOWPOS4IMESAPROC glWindowPos4iMESA = NULL;
PFNGLWINDOWPOS4IVMESAPROC glWindowPos4ivMESA = NULL;
PFNGLWINDOWPOS4SMESAPROC glWindowPos4sMESA = NULL;
PFNGLWINDOWPOS4SVMESAPROC glWindowPos4svMESA = NULL;

bool GL_IBM_cull_vertex_supported = false;
bool GL_IBM_multimode_draw_arrays_supported = false;
PFNGLMULTIMODEDRAWARRAYSIBMPROC glMultiModeDrawArraysIBM = NULL;
PFNGLMULTIMODEDRAWELEMENTSIBMPROC glMultiModeDrawElementsIBM = NULL;

bool GL_IBM_vertex_array_lists_supported = false;
PFNGLCOLORPOINTERLISTIBMPROC glColorPointerListIBM = NULL;
PFNGLSECONDARYCOLORPOINTERLISTIBMPROC glSecondaryColorPointerListIBM = NULL;
PFNGLEDGEFLAGPOINTERLISTIBMPROC glEdgeFlagPointerListIBM = NULL;
PFNGLFOGCOORDPOINTERLISTIBMPROC glFogCoordPointerListIBM = NULL;
PFNGLINDEXPOINTERLISTIBMPROC glIndexPointerListIBM = NULL;
PFNGLNORMALPOINTERLISTIBMPROC glNormalPointerListIBM = NULL;
PFNGLTEXCOORDPOINTERLISTIBMPROC glTexCoordPointerListIBM = NULL;
PFNGLVERTEXPOINTERLISTIBMPROC glVertexPointerListIBM = NULL;

bool GL_SGIX_subsample_supported = false;
bool GL_SGIX_ycrcba_supported = false;
bool GL_SGIX_ycrcb_subsample_supported = false;
bool GL_SGIX_depth_pass_instrument_supported = false;
bool GL_3DFX_texture_compression_FXT1_supported = false;
bool GL_3DFX_multisample_supported = false;
bool GL_3DFX_tbuffer_supported = false;
PFNGLTBUFFERMASK3DFXPROC glTbufferMask3DFX = NULL;

bool GL_EXT_multisample_supported = false;
PFNGLSAMPLEMASKEXTPROC glSampleMaskEXT = NULL;
PFNGLSAMPLEPATTERNEXTPROC glSamplePatternEXT = NULL;

bool GL_SGIX_vertex_preclip_supported = false;
bool GL_SGIX_convolution_accuracy_supported = false;
bool GL_SGIX_resample_supported = false;
bool GL_SGIS_point_line_texgen_supported = false;
bool GL_SGIS_texture_color_mask_supported = false;
PFNGLTEXTURECOLORMASKSGISPROC glTextureColorMaskSGIS = NULL;

bool GL_SGIX_igloo_interface_supported = false;
PFNGLIGLOOINTERFACESGIXPROC glIglooInterfaceSGIX = NULL;

bool GL_EXT_texture_env_dot3_supported = false;
bool GL_ATI_texture_mirror_once_supported = false;
bool GL_NV_fence_supported = false;
PFNGLDELETEFENCESNVPROC glDeleteFencesNV = NULL;
PFNGLGENFENCESNVPROC glGenFencesNV = NULL;
PFNGLISFENCENVPROC glIsFenceNV = NULL;
PFNGLTESTFENCENVPROC glTestFenceNV = NULL;
PFNGLGETFENCEIVNVPROC glGetFenceivNV = NULL;
PFNGLFINISHFENCENVPROC glFinishFenceNV = NULL;
PFNGLSETFENCENVPROC glSetFenceNV = NULL;

bool GL_NV_evaluators_supported = false;
PFNGLMAPCONTROLPOINTSNVPROC glMapControlPointsNV = NULL;
PFNGLMAPPARAMETERIVNVPROC glMapParameterivNV = NULL;
PFNGLMAPPARAMETERFVNVPROC glMapParameterfvNV = NULL;
PFNGLGETMAPCONTROLPOINTSNVPROC glGetMapControlPointsNV = NULL;
PFNGLGETMAPPARAMETERIVNVPROC glGetMapParameterivNV = NULL;
PFNGLGETMAPPARAMETERFVNVPROC glGetMapParameterfvNV = NULL;
PFNGLGETMAPATTRIBPARAMETERIVNVPROC glGetMapAttribParameterivNV = NULL;
PFNGLGETMAPATTRIBPARAMETERFVNVPROC glGetMapAttribParameterfvNV = NULL;
PFNGLEVALMAPSNVPROC glEvalMapsNV = NULL;

bool GL_NV_packed_depth_stencil_supported = false;
bool GL_NV_register_combiners2_supported = false;
PFNGLCOMBINERSTAGEPARAMETERFVNVPROC glCombinerStageParameterfvNV = NULL;
PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC glGetCombinerStageParameterfvNV = NULL;

bool GL_NV_texture_compression_vtc_supported = false;
bool GL_NV_texture_rectangle_supported = false;
bool GL_NV_texture_shader_supported = false;
bool GL_NV_texture_shader2_supported = false;
bool GL_NV_vertex_array_range2_supported = false;
bool GL_NV_vertex_program_supported = false;
PFNGLAREPROGRAMSRESIDENTNVPROC glAreProgramsResidentNV = NULL;
PFNGLBINDPROGRAMNVPROC glBindProgramNV = NULL;
PFNGLDELETEPROGRAMSNVPROC glDeleteProgramsNV = NULL;
PFNGLEXECUTEPROGRAMNVPROC glExecuteProgramNV = NULL;
PFNGLGENPROGRAMSNVPROC glGenProgramsNV = NULL;
PFNGLGETPROGRAMPARAMETERDVNVPROC glGetProgramParameterdvNV = NULL;
PFNGLGETPROGRAMPARAMETERFVNVPROC glGetProgramParameterfvNV = NULL;
PFNGLGETPROGRAMIVNVPROC glGetProgramivNV = NULL;
PFNGLGETPROGRAMSTRINGNVPROC glGetProgramStringNV = NULL;
PFNGLGETTRACKMATRIXIVNVPROC glGetTrackMatrixivNV = NULL;
PFNGLGETVERTEXATTRIBDVNVPROC glGetVertexAttribdvNV = NULL;
PFNGLGETVERTEXATTRIBFVNVPROC glGetVertexAttribfvNV = NULL;
PFNGLGETVERTEXATTRIBIVNVPROC glGetVertexAttribivNV = NULL;
PFNGLGETVERTEXATTRIBPOINTERVNVPROC glGetVertexAttribPointervNV = NULL;
PFNGLISPROGRAMNVPROC glIsProgramNV = NULL;
PFNGLLOADPROGRAMNVPROC glLoadProgramNV = NULL;
PFNGLPROGRAMPARAMETER4DNVPROC glProgramParameter4dNV = NULL;
PFNGLPROGRAMPARAMETER4DVNVPROC glProgramParameter4dvNV = NULL;
PFNGLPROGRAMPARAMETER4FNVPROC glProgramParameter4fNV = NULL;
PFNGLPROGRAMPARAMETER4FVNVPROC glProgramParameter4fvNV = NULL;
PFNGLPROGRAMPARAMETERS4DVNVPROC glProgramParameters4dvNV = NULL;
PFNGLPROGRAMPARAMETERS4FVNVPROC glProgramParameters4fvNV = NULL;
PFNGLREQUESTRESIDENTPROGRAMSNVPROC glRequestResidentProgramsNV = NULL;
PFNGLTRACKMATRIXNVPROC glTrackMatrixNV = NULL;
PFNGLVERTEXATTRIBPOINTERNVPROC glVertexAttribPointerNV = NULL;
PFNGLVERTEXATTRIB1DNVPROC glVertexAttrib1dNV = NULL;
PFNGLVERTEXATTRIB1DVNVPROC glVertexAttrib1dvNV = NULL;
PFNGLVERTEXATTRIB1FNVPROC glVertexAttrib1fNV = NULL;
PFNGLVERTEXATTRIB1FVNVPROC glVertexAttrib1fvNV = NULL;
PFNGLVERTEXATTRIB1SNVPROC glVertexAttrib1sNV = NULL;
PFNGLVERTEXATTRIB1SVNVPROC glVertexAttrib1svNV = NULL;
PFNGLVERTEXATTRIB2DNVPROC glVertexAttrib2dNV = NULL;
PFNGLVERTEXATTRIB2DVNVPROC glVertexAttrib2dvNV = NULL;
PFNGLVERTEXATTRIB2FNVPROC glVertexAttrib2fNV = NULL;
PFNGLVERTEXATTRIB2FVNVPROC glVertexAttrib2fvNV = NULL;
PFNGLVERTEXATTRIB2SNVPROC glVertexAttrib2sNV = NULL;
PFNGLVERTEXATTRIB2SVNVPROC glVertexAttrib2svNV = NULL;
PFNGLVERTEXATTRIB3DNVPROC glVertexAttrib3dNV = NULL;
PFNGLVERTEXATTRIB3DVNVPROC glVertexAttrib3dvNV = NULL;
PFNGLVERTEXATTRIB3FNVPROC glVertexAttrib3fNV = NULL;
PFNGLVERTEXATTRIB3FVNVPROC glVertexAttrib3fvNV = NULL;
PFNGLVERTEXATTRIB3SNVPROC glVertexAttrib3sNV = NULL;
PFNGLVERTEXATTRIB3SVNVPROC glVertexAttrib3svNV = NULL;
PFNGLVERTEXATTRIB4DNVPROC glVertexAttrib4dNV = NULL;
PFNGLVERTEXATTRIB4DVNVPROC glVertexAttrib4dvNV = NULL;
PFNGLVERTEXATTRIB4FNVPROC glVertexAttrib4fNV = NULL;
PFNGLVERTEXATTRIB4FVNVPROC glVertexAttrib4fvNV = NULL;
PFNGLVERTEXATTRIB4SNVPROC glVertexAttrib4sNV = NULL;
PFNGLVERTEXATTRIB4SVNVPROC glVertexAttrib4svNV = NULL;
PFNGLVERTEXATTRIB4UBNVPROC glVertexAttrib4ubNV = NULL;
PFNGLVERTEXATTRIB4UBVNVPROC glVertexAttrib4ubvNV = NULL;
PFNGLVERTEXATTRIBS1DVNVPROC glVertexAttribs1dvNV = NULL;
PFNGLVERTEXATTRIBS1FVNVPROC glVertexAttribs1fvNV = NULL;
PFNGLVERTEXATTRIBS1SVNVPROC glVertexAttribs1svNV = NULL;
PFNGLVERTEXATTRIBS2DVNVPROC glVertexAttribs2dvNV = NULL;
PFNGLVERTEXATTRIBS2FVNVPROC glVertexAttribs2fvNV = NULL;
PFNGLVERTEXATTRIBS2SVNVPROC glVertexAttribs2svNV = NULL;
PFNGLVERTEXATTRIBS3DVNVPROC glVertexAttribs3dvNV = NULL;
PFNGLVERTEXATTRIBS3FVNVPROC glVertexAttribs3fvNV = NULL;
PFNGLVERTEXATTRIBS3SVNVPROC glVertexAttribs3svNV = NULL;
PFNGLVERTEXATTRIBS4DVNVPROC glVertexAttribs4dvNV = NULL;
PFNGLVERTEXATTRIBS4FVNVPROC glVertexAttribs4fvNV = NULL;
PFNGLVERTEXATTRIBS4SVNVPROC glVertexAttribs4svNV = NULL;
PFNGLVERTEXATTRIBS4UBVNVPROC glVertexAttribs4ubvNV = NULL;

bool GL_SGIX_texture_coordinate_clamp_supported = false;
bool GL_SGIX_scalebias_hint_supported = false;
bool GL_OML_interlace_supported = false;
bool GL_OML_subsample_supported = false;
bool GL_OML_resample_supported = false;
bool GL_NV_copy_depth_to_color_supported = false;
bool GL_ATI_envmap_bumpmap_supported = false;
PFNGLTEXBUMPPARAMETERIVATIPROC glTexBumpParameterivATI = NULL;
PFNGLTEXBUMPPARAMETERFVATIPROC glTexBumpParameterfvATI = NULL;
PFNGLGETTEXBUMPPARAMETERIVATIPROC glGetTexBumpParameterivATI = NULL;
PFNGLGETTEXBUMPPARAMETERFVATIPROC glGetTexBumpParameterfvATI = NULL;

bool GL_ATI_fragment_shader_supported = false;
PFNGLGENFRAGMENTSHADERSATIPROC glGenFragmentShadersATI = NULL;
PFNGLBINDFRAGMENTSHADERATIPROC glBindFragmentShaderATI = NULL;
PFNGLDELETEFRAGMENTSHADERATIPROC glDeleteFragmentShaderATI = NULL;
PFNGLBEGINFRAGMENTSHADERATIPROC glBeginFragmentShaderATI = NULL;
PFNGLENDFRAGMENTSHADERATIPROC glEndFragmentShaderATI = NULL;
PFNGLPASSTEXCOORDATIPROC glPassTexCoordATI = NULL;
PFNGLSAMPLEMAPATIPROC glSampleMapATI = NULL;
PFNGLCOLORFRAGMENTOP1ATIPROC glColorFragmentOp1ATI = NULL;
PFNGLCOLORFRAGMENTOP2ATIPROC glColorFragmentOp2ATI = NULL;
PFNGLCOLORFRAGMENTOP3ATIPROC glColorFragmentOp3ATI = NULL;
PFNGLALPHAFRAGMENTOP1ATIPROC glAlphaFragmentOp1ATI = NULL;
PFNGLALPHAFRAGMENTOP2ATIPROC glAlphaFragmentOp2ATI = NULL;
PFNGLALPHAFRAGMENTOP3ATIPROC glAlphaFragmentOp3ATI = NULL;
PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glSetFragmentShaderConstantATI = NULL;

bool GL_ATI_pn_triangles_supported = false;
PFNGLPNTRIANGLESIATIPROC glPNTrianglesiATI = NULL;
PFNGLPNTRIANGLESFATIPROC glPNTrianglesfATI = NULL;

bool GL_ATI_vertex_array_object_supported = false;
PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI = NULL;
PFNGLISOBJECTBUFFERATIPROC glIsObjectBufferATI = NULL;
PFNGLUPDATEOBJECTBUFFERATIPROC glUpdateObjectBufferATI = NULL;
PFNGLGETOBJECTBUFFERFVATIPROC glGetObjectBufferfvATI = NULL;
PFNGLGETOBJECTBUFFERIVATIPROC glGetObjectBufferivATI = NULL;
PFNGLFREEOBJECTBUFFERATIPROC glFreeObjectBufferATI = NULL;
PFNGLARRAYOBJECTATIPROC glArrayObjectATI = NULL;
PFNGLGETARRAYOBJECTFVATIPROC glGetArrayObjectfvATI = NULL;
PFNGLGETARRAYOBJECTIVATIPROC glGetArrayObjectivATI = NULL;
PFNGLVARIANTARRAYOBJECTATIPROC glVariantArrayObjectATI = NULL;
PFNGLGETVARIANTARRAYOBJECTFVATIPROC glGetVariantArrayObjectfvATI = NULL;
PFNGLGETVARIANTARRAYOBJECTIVATIPROC glGetVariantArrayObjectivATI = NULL;

bool GL_EXT_vertex_shader_supported = false;
PFNGLBEGINVERTEXSHADEREXTPROC glBeginVertexShaderEXT = NULL;
PFNGLENDVERTEXSHADEREXTPROC glEndVertexShaderEXT = NULL;
PFNGLBINDVERTEXSHADEREXTPROC glBindVertexShaderEXT = NULL;
PFNGLGENVERTEXSHADERSEXTPROC glGenVertexShadersEXT = NULL;
PFNGLDELETEVERTEXSHADEREXTPROC glDeleteVertexShaderEXT = NULL;
PFNGLSHADEROP1EXTPROC glShaderOp1EXT = NULL;
PFNGLSHADEROP2EXTPROC glShaderOp2EXT = NULL;
PFNGLSHADEROP3EXTPROC glShaderOp3EXT = NULL;
PFNGLSWIZZLEEXTPROC glSwizzleEXT = NULL;
PFNGLWRITEMASKEXTPROC glWriteMaskEXT = NULL;
PFNGLINSERTCOMPONENTEXTPROC glInsertComponentEXT = NULL;
PFNGLEXTRACTCOMPONENTEXTPROC glExtractComponentEXT = NULL;
PFNGLGENSYMBOLSEXTPROC glGenSymbolsEXT = NULL;
PFNGLSETINVARIANTEXTPROC glSetInvariantEXT = NULL;
PFNGLSETLOCALCONSTANTEXTPROC glSetLocalConstantEXT = NULL;
PFNGLVARIANTBVEXTPROC glVariantbvEXT = NULL;
PFNGLVARIANTSVEXTPROC glVariantsvEXT = NULL;
PFNGLVARIANTIVEXTPROC glVariantivEXT = NULL;
PFNGLVARIANTFVEXTPROC glVariantfvEXT = NULL;
PFNGLVARIANTDVEXTPROC glVariantdvEXT = NULL;
PFNGLVARIANTUBVEXTPROC glVariantubvEXT = NULL;
PFNGLVARIANTUSVEXTPROC glVariantusvEXT = NULL;
PFNGLVARIANTUIVEXTPROC glVariantuivEXT = NULL;
PFNGLVARIANTPOINTEREXTPROC glVariantPointerEXT = NULL;
PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glEnableVariantClientStateEXT = NULL;
PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glDisableVariantClientStateEXT = NULL;
PFNGLBINDLIGHTPARAMETEREXTPROC glBindLightParameterEXT = NULL;
PFNGLBINDMATERIALPARAMETEREXTPROC glBindMaterialParameterEXT = NULL;
PFNGLBINDTEXGENPARAMETEREXTPROC glBindTexGenParameterEXT = NULL;
PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glBindTextureUnitParameterEXT = NULL;
PFNGLBINDPARAMETEREXTPROC glBindParameterEXT = NULL;
PFNGLISVARIANTENABLEDEXTPROC glIsVariantEnabledEXT = NULL;
PFNGLGETVARIANTBOOLEANVEXTPROC glGetVariantBooleanvEXT = NULL;
PFNGLGETVARIANTINTEGERVEXTPROC glGetVariantIntegervEXT = NULL;
PFNGLGETVARIANTFLOATVEXTPROC glGetVariantFloatvEXT = NULL;
PFNGLGETVARIANTPOINTERVEXTPROC glGetVariantPointervEXT = NULL;
PFNGLGETINVARIANTBOOLEANVEXTPROC glGetInvariantBooleanvEXT = NULL;
PFNGLGETINVARIANTINTEGERVEXTPROC glGetInvariantIntegervEXT = NULL;
PFNGLGETINVARIANTFLOATVEXTPROC glGetInvariantFloatvEXT = NULL;
PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glGetLocalConstantBooleanvEXT = NULL;
PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glGetLocalConstantIntegervEXT = NULL;
PFNGLGETLOCALCONSTANTFLOATVEXTPROC glGetLocalConstantFloatvEXT = NULL;

bool GL_ATI_vertex_streams_supported = false;
PFNGLVERTEXSTREAM1SATIPROC glVertexStream1sATI = NULL;
PFNGLVERTEXSTREAM1SVATIPROC glVertexStream1svATI = NULL;
PFNGLVERTEXSTREAM1IATIPROC glVertexStream1iATI = NULL;
PFNGLVERTEXSTREAM1IVATIPROC glVertexStream1ivATI = NULL;
PFNGLVERTEXSTREAM1FATIPROC glVertexStream1fATI = NULL;
PFNGLVERTEXSTREAM1FVATIPROC glVertexStream1fvATI = NULL;
PFNGLVERTEXSTREAM1DATIPROC glVertexStream1dATI = NULL;
PFNGLVERTEXSTREAM1DVATIPROC glVertexStream1dvATI = NULL;
PFNGLVERTEXSTREAM2SATIPROC glVertexStream2sATI = NULL;
PFNGLVERTEXSTREAM2SVATIPROC glVertexStream2svATI = NULL;
PFNGLVERTEXSTREAM2IATIPROC glVertexStream2iATI = NULL;
PFNGLVERTEXSTREAM2IVATIPROC glVertexStream2ivATI = NULL;
PFNGLVERTEXSTREAM2FATIPROC glVertexStream2fATI = NULL;
PFNGLVERTEXSTREAM2FVATIPROC glVertexStream2fvATI = NULL;
PFNGLVERTEXSTREAM2DATIPROC glVertexStream2dATI = NULL;
PFNGLVERTEXSTREAM2DVATIPROC glVertexStream2dvATI = NULL;
PFNGLVERTEXSTREAM3SATIPROC glVertexStream3sATI = NULL;
PFNGLVERTEXSTREAM3SVATIPROC glVertexStream3svATI = NULL;
PFNGLVERTEXSTREAM3IATIPROC glVertexStream3iATI = NULL;
PFNGLVERTEXSTREAM3IVATIPROC glVertexStream3ivATI = NULL;
PFNGLVERTEXSTREAM3FATIPROC glVertexStream3fATI = NULL;
PFNGLVERTEXSTREAM3FVATIPROC glVertexStream3fvATI = NULL;
PFNGLVERTEXSTREAM3DATIPROC glVertexStream3dATI = NULL;
PFNGLVERTEXSTREAM3DVATIPROC glVertexStream3dvATI = NULL;
PFNGLVERTEXSTREAM4SATIPROC glVertexStream4sATI = NULL;
PFNGLVERTEXSTREAM4SVATIPROC glVertexStream4svATI = NULL;
PFNGLVERTEXSTREAM4IATIPROC glVertexStream4iATI = NULL;
PFNGLVERTEXSTREAM4IVATIPROC glVertexStream4ivATI = NULL;
PFNGLVERTEXSTREAM4FATIPROC glVertexStream4fATI = NULL;
PFNGLVERTEXSTREAM4FVATIPROC glVertexStream4fvATI = NULL;
PFNGLVERTEXSTREAM4DATIPROC glVertexStream4dATI = NULL;
PFNGLVERTEXSTREAM4DVATIPROC glVertexStream4dvATI = NULL;
PFNGLNORMALSTREAM3BATIPROC glNormalStream3bATI = NULL;
PFNGLNORMALSTREAM3BVATIPROC glNormalStream3bvATI = NULL;
PFNGLNORMALSTREAM3SATIPROC glNormalStream3sATI = NULL;
PFNGLNORMALSTREAM3SVATIPROC glNormalStream3svATI = NULL;
PFNGLNORMALSTREAM3IATIPROC glNormalStream3iATI = NULL;
PFNGLNORMALSTREAM3IVATIPROC glNormalStream3ivATI = NULL;
PFNGLNORMALSTREAM3FATIPROC glNormalStream3fATI = NULL;
PFNGLNORMALSTREAM3FVATIPROC glNormalStream3fvATI = NULL;
PFNGLNORMALSTREAM3DATIPROC glNormalStream3dATI = NULL;
PFNGLNORMALSTREAM3DVATIPROC glNormalStream3dvATI = NULL;
PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC glClientActiveVertexStreamATI = NULL;
PFNGLVERTEXBLENDENVIATIPROC glVertexBlendEnviATI = NULL;
PFNGLVERTEXBLENDENVFATIPROC glVertexBlendEnvfATI = NULL;

bool GL_ATI_element_array_supported = false;
PFNGLELEMENTPOINTERATIPROC glElementPointerATI = NULL;
PFNGLDRAWELEMENTARRAYATIPROC glDrawElementArrayATI = NULL;
PFNGLDRAWRANGEELEMENTARRAYATIPROC glDrawRangeElementArrayATI = NULL;

bool GL_SUN_mesh_array_supported = false;
PFNGLDRAWMESHARRAYSSUNPROC glDrawMeshArraysSUN = NULL;

bool GL_SUN_slice_accum_supported = false;
bool GL_NV_multisample_filter_hint_supported = false;
bool GL_NV_depth_clamp_supported = false;
bool GL_NV_occlusion_query_supported = false;
PFNGLGENOCCLUSIONQUERIESNVPROC glGenOcclusionQueriesNV = NULL;
PFNGLDELETEOCCLUSIONQUERIESNVPROC glDeleteOcclusionQueriesNV = NULL;
PFNGLISOCCLUSIONQUERYNVPROC glIsOcclusionQueryNV = NULL;
PFNGLBEGINOCCLUSIONQUERYNVPROC glBeginOcclusionQueryNV = NULL;
PFNGLENDOCCLUSIONQUERYNVPROC glEndOcclusionQueryNV = NULL;
PFNGLGETOCCLUSIONQUERYIVNVPROC glGetOcclusionQueryivNV = NULL;
PFNGLGETOCCLUSIONQUERYUIVNVPROC glGetOcclusionQueryuivNV = NULL;

bool GL_NV_point_sprite_supported = false;
PFNGLPOINTPARAMETERINVPROC glPointParameteriNV = NULL;
PFNGLPOINTPARAMETERIVNVPROC glPointParameterivNV = NULL;

bool GL_NV_texture_shader3_supported = false;
bool GL_NV_vertex_program1_1_supported = false;
bool GL_EXT_shadow_funcs_supported = false;
bool GL_EXT_stencil_two_side_supported = false;
PFNGLACTIVESTENCILFACEEXTPROC glActiveStencilFaceEXT = NULL;

bool GL_ATI_text_fragment_shader_supported = false;
bool GL_APPLE_client_storage_supported = false;
bool GL_APPLE_element_array_supported = false;
PFNGLELEMENTPOINTERAPPLEPROC glElementPointerAPPLE = NULL;
PFNGLDRAWELEMENTARRAYAPPLEPROC glDrawElementArrayAPPLE = NULL;
PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC glDrawRangeElementArrayAPPLE = NULL;
PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC glMultiDrawElementArrayAPPLE = NULL;
PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC glMultiDrawRangeElementArrayAPPLE = NULL;

bool GL_APPLE_fence_supported = false;
PFNGLGENFENCESAPPLEPROC glGenFencesAPPLE = NULL;
PFNGLDELETEFENCESAPPLEPROC glDeleteFencesAPPLE = NULL;
PFNGLSETFENCEAPPLEPROC glSetFenceAPPLE = NULL;
PFNGLISFENCEAPPLEPROC glIsFenceAPPLE = NULL;
PFNGLTESTFENCEAPPLEPROC glTestFenceAPPLE = NULL;
PFNGLFINISHFENCEAPPLEPROC glFinishFenceAPPLE = NULL;
PFNGLTESTOBJECTAPPLEPROC glTestObjectAPPLE = NULL;
PFNGLFINISHOBJECTAPPLEPROC glFinishObjectAPPLE = NULL;

bool GL_APPLE_vertex_array_object_supported = false;
PFNGLBINDVERTEXARRAYAPPLEPROC glBindVertexArrayAPPLE = NULL;
PFNGLDELETEVERTEXARRAYSAPPLEPROC glDeleteVertexArraysAPPLE = NULL;
PFNGLGENVERTEXARRAYSAPPLEPROC glGenVertexArraysAPPLE = NULL;
PFNGLISVERTEXARRAYAPPLEPROC glIsVertexArrayAPPLE = NULL;

bool GL_APPLE_vertex_array_range_supported = false;
PFNGLVERTEXARRAYRANGEAPPLEPROC glVertexArrayRangeAPPLE = NULL;
PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC glFlushVertexArrayRangeAPPLE = NULL;
PFNGLVERTEXARRAYPARAMETERIAPPLEPROC glVertexArrayParameteriAPPLE = NULL;

bool GL_APPLE_ycbcr_422_supported = false;
bool GL_S3_s3tc_supported = false;
bool GL_ATI_draw_buffers_supported = false;
PFNGLDRAWBUFFERSATIPROC glDrawBuffersATI = NULL;

bool GL_ATI_pixel_format_float_supported = false;
bool GL_ATI_texture_env_combine3_supported = false;
bool GL_ATI_texture_float_supported = false;
bool GL_NV_float_buffer_supported = false;
bool GL_NV_fragment_program_supported = false;
PFNGLPROGRAMNAMEDPARAMETER4FNVPROC glProgramNamedParameter4fNV = NULL;
PFNGLPROGRAMNAMEDPARAMETER4DNVPROC glProgramNamedParameter4dNV = NULL;
PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC glProgramNamedParameter4fvNV = NULL;
PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC glProgramNamedParameter4dvNV = NULL;
PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC glGetProgramNamedParameterfvNV = NULL;
PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC glGetProgramNamedParameterdvNV = NULL;

bool GL_NV_half_float_supported = false;
PFNGLVERTEX2HNVPROC glVertex2hNV = NULL;
PFNGLVERTEX2HVNVPROC glVertex2hvNV = NULL;
PFNGLVERTEX3HNVPROC glVertex3hNV = NULL;
PFNGLVERTEX3HVNVPROC glVertex3hvNV = NULL;
PFNGLVERTEX4HNVPROC glVertex4hNV = NULL;
PFNGLVERTEX4HVNVPROC glVertex4hvNV = NULL;
PFNGLNORMAL3HNVPROC glNormal3hNV = NULL;
PFNGLNORMAL3HVNVPROC glNormal3hvNV = NULL;
PFNGLCOLOR3HNVPROC glColor3hNV = NULL;
PFNGLCOLOR3HVNVPROC glColor3hvNV = NULL;
PFNGLCOLOR4HNVPROC glColor4hNV = NULL;
PFNGLCOLOR4HVNVPROC glColor4hvNV = NULL;
PFNGLTEXCOORD1HNVPROC glTexCoord1hNV = NULL;
PFNGLTEXCOORD1HVNVPROC glTexCoord1hvNV = NULL;
PFNGLTEXCOORD2HNVPROC glTexCoord2hNV = NULL;
PFNGLTEXCOORD2HVNVPROC glTexCoord2hvNV = NULL;
PFNGLTEXCOORD3HNVPROC glTexCoord3hNV = NULL;
PFNGLTEXCOORD3HVNVPROC glTexCoord3hvNV = NULL;
PFNGLTEXCOORD4HNVPROC glTexCoord4hNV = NULL;
PFNGLTEXCOORD4HVNVPROC glTexCoord4hvNV = NULL;
PFNGLMULTITEXCOORD1HNVPROC glMultiTexCoord1hNV = NULL;
PFNGLMULTITEXCOORD1HVNVPROC glMultiTexCoord1hvNV = NULL;
PFNGLMULTITEXCOORD2HNVPROC glMultiTexCoord2hNV = NULL;
PFNGLMULTITEXCOORD2HVNVPROC glMultiTexCoord2hvNV = NULL;
PFNGLMULTITEXCOORD3HNVPROC glMultiTexCoord3hNV = NULL;
PFNGLMULTITEXCOORD3HVNVPROC glMultiTexCoord3hvNV = NULL;
PFNGLMULTITEXCOORD4HNVPROC glMultiTexCoord4hNV = NULL;
PFNGLMULTITEXCOORD4HVNVPROC glMultiTexCoord4hvNV = NULL;
PFNGLFOGCOORDHNVPROC glFogCoordhNV = NULL;
PFNGLFOGCOORDHVNVPROC glFogCoordhvNV = NULL;
PFNGLSECONDARYCOLOR3HNVPROC glSecondaryColor3hNV = NULL;
PFNGLSECONDARYCOLOR3HVNVPROC glSecondaryColor3hvNV = NULL;
PFNGLVERTEXWEIGHTHNVPROC glVertexWeighthNV = NULL;
PFNGLVERTEXWEIGHTHVNVPROC glVertexWeighthvNV = NULL;
PFNGLVERTEXATTRIB1HNVPROC glVertexAttrib1hNV = NULL;
PFNGLVERTEXATTRIB1HVNVPROC glVertexAttrib1hvNV = NULL;
PFNGLVERTEXATTRIB2HNVPROC glVertexAttrib2hNV = NULL;
PFNGLVERTEXATTRIB2HVNVPROC glVertexAttrib2hvNV = NULL;
PFNGLVERTEXATTRIB3HNVPROC glVertexAttrib3hNV = NULL;
PFNGLVERTEXATTRIB3HVNVPROC glVertexAttrib3hvNV = NULL;
PFNGLVERTEXATTRIB4HNVPROC glVertexAttrib4hNV = NULL;
PFNGLVERTEXATTRIB4HVNVPROC glVertexAttrib4hvNV = NULL;
PFNGLVERTEXATTRIBS1HVNVPROC glVertexAttribs1hvNV = NULL;
PFNGLVERTEXATTRIBS2HVNVPROC glVertexAttribs2hvNV = NULL;
PFNGLVERTEXATTRIBS3HVNVPROC glVertexAttribs3hvNV = NULL;
PFNGLVERTEXATTRIBS4HVNVPROC glVertexAttribs4hvNV = NULL;

bool GL_NV_pixel_data_range_supported = false;
PFNGLPIXELDATARANGENVPROC glPixelDataRangeNV = NULL;
PFNGLFLUSHPIXELDATARANGENVPROC glFlushPixelDataRangeNV = NULL;

bool GL_NV_primitive_restart_supported = false;
PFNGLPRIMITIVERESTARTNVPROC glPrimitiveRestartNV = NULL;
PFNGLPRIMITIVERESTARTINDEXNVPROC glPrimitiveRestartIndexNV = NULL;

bool GL_NV_texture_expand_normal_supported = false;
bool GL_NV_vertex_program2_supported = false;
bool GL_ATI_map_object_buffer_supported = false;
PFNGLMAPOBJECTBUFFERATIPROC glMapObjectBufferATI = NULL;
PFNGLUNMAPOBJECTBUFFERATIPROC glUnmapObjectBufferATI = NULL;

bool GL_ATI_separate_stencil_supported = false;
PFNGLSTENCILOPSEPARATEATIPROC glStencilOpSeparateATI = NULL;
PFNGLSTENCILFUNCSEPARATEATIPROC glStencilFuncSeparateATI = NULL;

bool GL_ATI_vertex_attrib_array_object_supported = false;
PFNGLVERTEXATTRIBARRAYOBJECTATIPROC glVertexAttribArrayObjectATI = NULL;
PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC glGetVertexAttribArrayObjectfvATI = NULL;
PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC glGetVertexAttribArrayObjectivATI = NULL;

bool GL_OES_read_format_supported = false;
bool GL_EXT_depth_bounds_test_supported = false;
PFNGLDEPTHBOUNDSEXTPROC glDepthBoundsEXT = NULL;

bool GL_EXT_texture_mirror_clamp_supported = false;
bool GL_EXT_blend_equation_separate_supported = false;
PFNGLBLENDEQUATIONSEPARATEEXTPROC glBlendEquationSeparateEXT = NULL;

bool GL_MESA_pack_invert_supported = false;
bool GL_MESA_ycbcr_texture_supported = false;
bool GL_EXT_pixel_buffer_object_supported = false;
bool GL_NV_fragment_program_option_supported = false;
bool GL_NV_fragment_program2_supported = false;
bool GL_NV_vertex_program2_option_supported = false;
bool GL_NV_vertex_program3_supported = false;
bool GL_EXT_framebuffer_object_supported = false;
PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT = NULL;
PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT = NULL;
PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT = NULL;
PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT = NULL;
PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT = NULL;
PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT = NULL;
PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT = NULL;
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT = NULL;
PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT = NULL;
PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT = NULL;
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT = NULL;
PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT = NULL;
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT = NULL;
PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT = NULL;
PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT = NULL;
PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT = NULL;
PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT = NULL;

bool GL_GREMEDY_string_marker_supported = false;
PFNGLSTRINGMARKERGREMEDYPROC glStringMarkerGREMEDY = NULL;

bool GL_EXT_packed_depth_stencil_supported = false;
bool GL_EXT_stencil_clear_tag_supported = false;
PFNGLSTENCILCLEARTAGEXTPROC glStencilClearTagEXT = NULL;

bool GL_EXT_texture_sRGB_supported = false;
bool GL_EXT_framebuffer_blit_supported = false;
PFNGLBLITFRAMEBUFFEREXTPROC glBlitFramebufferEXT = NULL;

bool GL_EXT_framebuffer_multisample_supported = false;
PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glRenderbufferStorageMultisampleEXT = NULL;

bool GL_MESAX_texture_stack_supported = false;
bool GL_EXT_timer_query_supported = false;
PFNGLGETQUERYOBJECTI64VEXTPROC glGetQueryObjecti64vEXT = NULL;
PFNGLGETQUERYOBJECTUI64VEXTPROC glGetQueryObjectui64vEXT = NULL;

bool GL_EXT_gpu_program_parameters_supported = false;
PFNGLPROGRAMENVPARAMETERS4FVEXTPROC glProgramEnvParameters4fvEXT = NULL;
PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC glProgramLocalParameters4fvEXT = NULL;

bool GL_APPLE_flush_buffer_range_supported = false;
PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE = NULL;
PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE = NULL;

bool GL_NV_gpu_program4_supported = false;
PFNGLPROGRAMLOCALPARAMETERI4INVPROC glProgramLocalParameterI4iNV = NULL;
PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC glProgramLocalParameterI4ivNV = NULL;
PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC glProgramLocalParametersI4ivNV = NULL;
PFNGLPROGRAMLOCALPARAMETERI4UINVPROC glProgramLocalParameterI4uiNV = NULL;
PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC glProgramLocalParameterI4uivNV = NULL;
PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC glProgramLocalParametersI4uivNV = NULL;
PFNGLPROGRAMENVPARAMETERI4INVPROC glProgramEnvParameterI4iNV = NULL;
PFNGLPROGRAMENVPARAMETERI4IVNVPROC glProgramEnvParameterI4ivNV = NULL;
PFNGLPROGRAMENVPARAMETERSI4IVNVPROC glProgramEnvParametersI4ivNV = NULL;
PFNGLPROGRAMENVPARAMETERI4UINVPROC glProgramEnvParameterI4uiNV = NULL;
PFNGLPROGRAMENVPARAMETERI4UIVNVPROC glProgramEnvParameterI4uivNV = NULL;
PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC glProgramEnvParametersI4uivNV = NULL;
PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC glGetProgramLocalParameterIivNV = NULL;
PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC glGetProgramLocalParameterIuivNV = NULL;
PFNGLGETPROGRAMENVPARAMETERIIVNVPROC glGetProgramEnvParameterIivNV = NULL;
PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC glGetProgramEnvParameterIuivNV = NULL;

bool GL_NV_geometry_program4_supported = false;
PFNGLPROGRAMVERTEXLIMITNVPROC glProgramVertexLimitNV = NULL;
PFNGLFRAMEBUFFERTEXTUREEXTPROC glFramebufferTextureEXT = NULL;
PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC glFramebufferTextureLayerEXT = NULL;
PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC glFramebufferTextureFaceEXT = NULL;

bool GL_EXT_geometry_shader4_supported = false;
PFNGLPROGRAMPARAMETERIEXTPROC glProgramParameteriEXT = NULL;

bool GL_NV_vertex_program4_supported = false;
PFNGLVERTEXATTRIBI1IEXTPROC glVertexAttribI1iEXT = NULL;
PFNGLVERTEXATTRIBI2IEXTPROC glVertexAttribI2iEXT = NULL;
PFNGLVERTEXATTRIBI3IEXTPROC glVertexAttribI3iEXT = NULL;
PFNGLVERTEXATTRIBI4IEXTPROC glVertexAttribI4iEXT = NULL;
PFNGLVERTEXATTRIBI1UIEXTPROC glVertexAttribI1uiEXT = NULL;
PFNGLVERTEXATTRIBI2UIEXTPROC glVertexAttribI2uiEXT = NULL;
PFNGLVERTEXATTRIBI3UIEXTPROC glVertexAttribI3uiEXT = NULL;
PFNGLVERTEXATTRIBI4UIEXTPROC glVertexAttribI4uiEXT = NULL;
PFNGLVERTEXATTRIBI1IVEXTPROC glVertexAttribI1ivEXT = NULL;
PFNGLVERTEXATTRIBI2IVEXTPROC glVertexAttribI2ivEXT = NULL;
PFNGLVERTEXATTRIBI3IVEXTPROC glVertexAttribI3ivEXT = NULL;
PFNGLVERTEXATTRIBI4IVEXTPROC glVertexAttribI4ivEXT = NULL;
PFNGLVERTEXATTRIBI1UIVEXTPROC glVertexAttribI1uivEXT = NULL;
PFNGLVERTEXATTRIBI2UIVEXTPROC glVertexAttribI2uivEXT = NULL;
PFNGLVERTEXATTRIBI3UIVEXTPROC glVertexAttribI3uivEXT = NULL;
PFNGLVERTEXATTRIBI4UIVEXTPROC glVertexAttribI4uivEXT = NULL;
PFNGLVERTEXATTRIBI4BVEXTPROC glVertexAttribI4bvEXT = NULL;
PFNGLVERTEXATTRIBI4SVEXTPROC glVertexAttribI4svEXT = NULL;
PFNGLVERTEXATTRIBI4UBVEXTPROC glVertexAttribI4ubvEXT = NULL;
PFNGLVERTEXATTRIBI4USVEXTPROC glVertexAttribI4usvEXT = NULL;
PFNGLVERTEXATTRIBIPOINTEREXTPROC glVertexAttribIPointerEXT = NULL;
PFNGLGETVERTEXATTRIBIIVEXTPROC glGetVertexAttribIivEXT = NULL;
PFNGLGETVERTEXATTRIBIUIVEXTPROC glGetVertexAttribIuivEXT = NULL;

bool GL_EXT_gpu_shader4_supported = false;
PFNGLGETUNIFORMUIVEXTPROC glGetUniformuivEXT = NULL;
PFNGLBINDFRAGDATALOCATIONEXTPROC glBindFragDataLocationEXT = NULL;
PFNGLGETFRAGDATALOCATIONEXTPROC glGetFragDataLocationEXT = NULL;
PFNGLUNIFORM1UIEXTPROC glUniform1uiEXT = NULL;
PFNGLUNIFORM2UIEXTPROC glUniform2uiEXT = NULL;
PFNGLUNIFORM3UIEXTPROC glUniform3uiEXT = NULL;
PFNGLUNIFORM4UIEXTPROC glUniform4uiEXT = NULL;
PFNGLUNIFORM1UIVEXTPROC glUniform1uivEXT = NULL;
PFNGLUNIFORM2UIVEXTPROC glUniform2uivEXT = NULL;
PFNGLUNIFORM3UIVEXTPROC glUniform3uivEXT = NULL;
PFNGLUNIFORM4UIVEXTPROC glUniform4uivEXT = NULL;

bool GL_EXT_draw_instanced_supported = false;
PFNGLDRAWARRAYSINSTANCEDEXTPROC glDrawArraysInstancedEXT = NULL;
PFNGLDRAWELEMENTSINSTANCEDEXTPROC glDrawElementsInstancedEXT = NULL;

bool GL_EXT_packed_float_supported = false;
bool GL_EXT_texture_array_supported = false;
bool GL_EXT_texture_buffer_object_supported = false;
PFNGLTEXBUFFEREXTPROC glTexBufferEXT = NULL;

bool GL_EXT_texture_compression_latc_supported = false;
bool GL_EXT_texture_compression_rgtc_supported = false;
bool GL_EXT_texture_shared_exponent_supported = false;
bool GL_NV_depth_buffer_float_supported = false;
PFNGLDEPTHRANGEDNVPROC glDepthRangedNV = NULL;
PFNGLCLEARDEPTHDNVPROC glClearDepthdNV = NULL;
PFNGLDEPTHBOUNDSDNVPROC glDepthBoundsdNV = NULL;

bool GL_NV_fragment_program4_supported = false;
bool GL_NV_framebuffer_multisample_coverage_supported = false;
PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC glRenderbufferStorageMultisampleCoverageNV = NULL;

bool GL_EXT_framebuffer_sRGB_supported = false;
bool GL_NV_geometry_shader4_supported = false;
bool GL_NV_parameter_buffer_object_supported = false;
PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC glProgramBufferParametersfvNV = NULL;
PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC glProgramBufferParametersIivNV = NULL;
PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC glProgramBufferParametersIuivNV = NULL;

bool GL_EXT_draw_buffers2_supported = false;
PFNGLCOLORMASKINDEXEDEXTPROC glColorMaskIndexedEXT = NULL;
PFNGLGETBOOLEANINDEXEDVEXTPROC glGetBooleanIndexedvEXT = NULL;
PFNGLGETINTEGERINDEXEDVEXTPROC glGetIntegerIndexedvEXT = NULL;
PFNGLENABLEINDEXEDEXTPROC glEnableIndexedEXT = NULL;
PFNGLDISABLEINDEXEDEXTPROC glDisableIndexedEXT = NULL;
PFNGLISENABLEDINDEXEDEXTPROC glIsEnabledIndexedEXT = NULL;

bool GL_NV_transform_feedback_supported = false;
PFNGLBEGINTRANSFORMFEEDBACKNVPROC glBeginTransformFeedbackNV = NULL;
PFNGLENDTRANSFORMFEEDBACKNVPROC glEndTransformFeedbackNV = NULL;
PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC glTransformFeedbackAttribsNV = NULL;
PFNGLBINDBUFFERRANGENVPROC glBindBufferRangeNV = NULL;
PFNGLBINDBUFFEROFFSETNVPROC glBindBufferOffsetNV = NULL;
PFNGLBINDBUFFERBASENVPROC glBindBufferBaseNV = NULL;
PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC glTransformFeedbackVaryingsNV = NULL;
PFNGLACTIVEVARYINGNVPROC glActiveVaryingNV = NULL;
PFNGLGETVARYINGLOCATIONNVPROC glGetVaryingLocationNV = NULL;
PFNGLGETACTIVEVARYINGNVPROC glGetActiveVaryingNV = NULL;
PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC glGetTransformFeedbackVaryingNV = NULL;
PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC glTransformFeedbackStreamAttribsNV = NULL;

bool GL_EXT_bindable_uniform_supported = false;
PFNGLUNIFORMBUFFEREXTPROC glUniformBufferEXT = NULL;
PFNGLGETUNIFORMBUFFERSIZEEXTPROC glGetUniformBufferSizeEXT = NULL;
PFNGLGETUNIFORMOFFSETEXTPROC glGetUniformOffsetEXT = NULL;

bool GL_EXT_texture_integer_supported = false;
PFNGLTEXPARAMETERIIVEXTPROC glTexParameterIivEXT = NULL;
PFNGLTEXPARAMETERIUIVEXTPROC glTexParameterIuivEXT = NULL;
PFNGLGETTEXPARAMETERIIVEXTPROC glGetTexParameterIivEXT = NULL;
PFNGLGETTEXPARAMETERIUIVEXTPROC glGetTexParameterIuivEXT = NULL;
PFNGLCLEARCOLORIIEXTPROC glClearColorIiEXT = NULL;
PFNGLCLEARCOLORIUIEXTPROC glClearColorIuiEXT = NULL;

bool GL_GREMEDY_frame_terminator_supported = false;
PFNGLFRAMETERMINATORGREMEDYPROC glFrameTerminatorGREMEDY = NULL;

bool GL_NV_conditional_render_supported = false;
PFNGLBEGINCONDITIONALRENDERNVPROC glBeginConditionalRenderNV = NULL;
PFNGLENDCONDITIONALRENDERNVPROC glEndConditionalRenderNV = NULL;

bool GL_NV_present_video_supported = false;
PFNGLPRESENTFRAMEKEYEDNVPROC glPresentFrameKeyedNV = NULL;
PFNGLPRESENTFRAMEDUALFILLNVPROC glPresentFrameDualFillNV = NULL;
PFNGLGETVIDEOIVNVPROC glGetVideoivNV = NULL;
PFNGLGETVIDEOUIVNVPROC glGetVideouivNV = NULL;
PFNGLGETVIDEOI64VNVPROC glGetVideoi64vNV = NULL;
PFNGLGETVIDEOUI64VNVPROC glGetVideoui64vNV = NULL;

bool GL_EXT_transform_feedback_supported = false;
PFNGLBEGINTRANSFORMFEEDBACKEXTPROC glBeginTransformFeedbackEXT = NULL;
PFNGLENDTRANSFORMFEEDBACKEXTPROC glEndTransformFeedbackEXT = NULL;
PFNGLBINDBUFFERRANGEEXTPROC glBindBufferRangeEXT = NULL;
PFNGLBINDBUFFEROFFSETEXTPROC glBindBufferOffsetEXT = NULL;
PFNGLBINDBUFFERBASEEXTPROC glBindBufferBaseEXT = NULL;
PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC glTransformFeedbackVaryingsEXT = NULL;
PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC glGetTransformFeedbackVaryingEXT = NULL;

bool GL_EXT_direct_state_access_supported = false;
PFNGLCLIENTATTRIBDEFAULTEXTPROC glClientAttribDefaultEXT = NULL;
PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC glPushClientAttribDefaultEXT = NULL;
PFNGLMATRIXLOADFEXTPROC glMatrixLoadfEXT = NULL;
PFNGLMATRIXLOADDEXTPROC glMatrixLoaddEXT = NULL;
PFNGLMATRIXMULTFEXTPROC glMatrixMultfEXT = NULL;
PFNGLMATRIXMULTDEXTPROC glMatrixMultdEXT = NULL;
PFNGLMATRIXLOADIDENTITYEXTPROC glMatrixLoadIdentityEXT = NULL;
PFNGLMATRIXROTATEFEXTPROC glMatrixRotatefEXT = NULL;
PFNGLMATRIXROTATEDEXTPROC glMatrixRotatedEXT = NULL;
PFNGLMATRIXSCALEFEXTPROC glMatrixScalefEXT = NULL;
PFNGLMATRIXSCALEDEXTPROC glMatrixScaledEXT = NULL;
PFNGLMATRIXTRANSLATEFEXTPROC glMatrixTranslatefEXT = NULL;
PFNGLMATRIXTRANSLATEDEXTPROC glMatrixTranslatedEXT = NULL;
PFNGLMATRIXFRUSTUMEXTPROC glMatrixFrustumEXT = NULL;
PFNGLMATRIXORTHOEXTPROC glMatrixOrthoEXT = NULL;
PFNGLMATRIXPOPEXTPROC glMatrixPopEXT = NULL;
PFNGLMATRIXPUSHEXTPROC glMatrixPushEXT = NULL;
PFNGLMATRIXLOADTRANSPOSEFEXTPROC glMatrixLoadTransposefEXT = NULL;
PFNGLMATRIXLOADTRANSPOSEDEXTPROC glMatrixLoadTransposedEXT = NULL;
PFNGLMATRIXMULTTRANSPOSEFEXTPROC glMatrixMultTransposefEXT = NULL;
PFNGLMATRIXMULTTRANSPOSEDEXTPROC glMatrixMultTransposedEXT = NULL;
PFNGLTEXTUREPARAMETERFEXTPROC glTextureParameterfEXT = NULL;
PFNGLTEXTUREPARAMETERFVEXTPROC glTextureParameterfvEXT = NULL;
PFNGLTEXTUREPARAMETERIEXTPROC glTextureParameteriEXT = NULL;
PFNGLTEXTUREPARAMETERIVEXTPROC glTextureParameterivEXT = NULL;
PFNGLTEXTUREIMAGE1DEXTPROC glTextureImage1DEXT = NULL;
PFNGLTEXTUREIMAGE2DEXTPROC glTextureImage2DEXT = NULL;
PFNGLTEXTURESUBIMAGE1DEXTPROC glTextureSubImage1DEXT = NULL;
PFNGLTEXTURESUBIMAGE2DEXTPROC glTextureSubImage2DEXT = NULL;
PFNGLCOPYTEXTUREIMAGE1DEXTPROC glCopyTextureImage1DEXT = NULL;
PFNGLCOPYTEXTUREIMAGE2DEXTPROC glCopyTextureImage2DEXT = NULL;
PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC glCopyTextureSubImage1DEXT = NULL;
PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC glCopyTextureSubImage2DEXT = NULL;
PFNGLGETTEXTUREIMAGEEXTPROC glGetTextureImageEXT = NULL;
PFNGLGETTEXTUREPARAMETERFVEXTPROC glGetTextureParameterfvEXT = NULL;
PFNGLGETTEXTUREPARAMETERIVEXTPROC glGetTextureParameterivEXT = NULL;
PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC glGetTextureLevelParameterfvEXT = NULL;
PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC glGetTextureLevelParameterivEXT = NULL;
PFNGLTEXTUREIMAGE3DEXTPROC glTextureImage3DEXT = NULL;
PFNGLTEXTURESUBIMAGE3DEXTPROC glTextureSubImage3DEXT = NULL;
PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC glCopyTextureSubImage3DEXT = NULL;
PFNGLMULTITEXPARAMETERFEXTPROC glMultiTexParameterfEXT = NULL;
PFNGLMULTITEXPARAMETERFVEXTPROC glMultiTexParameterfvEXT = NULL;
PFNGLMULTITEXPARAMETERIEXTPROC glMultiTexParameteriEXT = NULL;
PFNGLMULTITEXPARAMETERIVEXTPROC glMultiTexParameterivEXT = NULL;
PFNGLMULTITEXIMAGE1DEXTPROC glMultiTexImage1DEXT = NULL;
PFNGLMULTITEXIMAGE2DEXTPROC glMultiTexImage2DEXT = NULL;
PFNGLMULTITEXSUBIMAGE1DEXTPROC glMultiTexSubImage1DEXT = NULL;
PFNGLMULTITEXSUBIMAGE2DEXTPROC glMultiTexSubImage2DEXT = NULL;
PFNGLCOPYMULTITEXIMAGE1DEXTPROC glCopyMultiTexImage1DEXT = NULL;
PFNGLCOPYMULTITEXIMAGE2DEXTPROC glCopyMultiTexImage2DEXT = NULL;
PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC glCopyMultiTexSubImage1DEXT = NULL;
PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC glCopyMultiTexSubImage2DEXT = NULL;
PFNGLGETMULTITEXIMAGEEXTPROC glGetMultiTexImageEXT = NULL;
PFNGLGETMULTITEXPARAMETERFVEXTPROC glGetMultiTexParameterfvEXT = NULL;
PFNGLGETMULTITEXPARAMETERIVEXTPROC glGetMultiTexParameterivEXT = NULL;
PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC glGetMultiTexLevelParameterfvEXT = NULL;
PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC glGetMultiTexLevelParameterivEXT = NULL;
PFNGLMULTITEXIMAGE3DEXTPROC glMultiTexImage3DEXT = NULL;
PFNGLMULTITEXSUBIMAGE3DEXTPROC glMultiTexSubImage3DEXT = NULL;
PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC glCopyMultiTexSubImage3DEXT = NULL;
PFNGLBINDMULTITEXTUREEXTPROC glBindMultiTextureEXT = NULL;
PFNGLENABLECLIENTSTATEINDEXEDEXTPROC glEnableClientStateIndexedEXT = NULL;
PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC glDisableClientStateIndexedEXT = NULL;
PFNGLMULTITEXCOORDPOINTEREXTPROC glMultiTexCoordPointerEXT = NULL;
PFNGLMULTITEXENVFEXTPROC glMultiTexEnvfEXT = NULL;
PFNGLMULTITEXENVFVEXTPROC glMultiTexEnvfvEXT = NULL;
PFNGLMULTITEXENVIEXTPROC glMultiTexEnviEXT = NULL;
PFNGLMULTITEXENVIVEXTPROC glMultiTexEnvivEXT = NULL;
PFNGLMULTITEXGENDEXTPROC glMultiTexGendEXT = NULL;
PFNGLMULTITEXGENDVEXTPROC glMultiTexGendvEXT = NULL;
PFNGLMULTITEXGENFEXTPROC glMultiTexGenfEXT = NULL;
PFNGLMULTITEXGENFVEXTPROC glMultiTexGenfvEXT = NULL;
PFNGLMULTITEXGENIEXTPROC glMultiTexGeniEXT = NULL;
PFNGLMULTITEXGENIVEXTPROC glMultiTexGenivEXT = NULL;
PFNGLGETMULTITEXENVFVEXTPROC glGetMultiTexEnvfvEXT = NULL;
PFNGLGETMULTITEXENVIVEXTPROC glGetMultiTexEnvivEXT = NULL;
PFNGLGETMULTITEXGENDVEXTPROC glGetMultiTexGendvEXT = NULL;
PFNGLGETMULTITEXGENFVEXTPROC glGetMultiTexGenfvEXT = NULL;
PFNGLGETMULTITEXGENIVEXTPROC glGetMultiTexGenivEXT = NULL;
PFNGLGETFLOATINDEXEDVEXTPROC glGetFloatIndexedvEXT = NULL;
PFNGLGETDOUBLEINDEXEDVEXTPROC glGetDoubleIndexedvEXT = NULL;
PFNGLGETPOINTERINDEXEDVEXTPROC glGetPointerIndexedvEXT = NULL;
PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC glCompressedTextureImage3DEXT = NULL;
PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC glCompressedTextureImage2DEXT = NULL;
PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC glCompressedTextureImage1DEXT = NULL;
PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC glCompressedTextureSubImage3DEXT = NULL;
PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC glCompressedTextureSubImage2DEXT = NULL;
PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC glCompressedTextureSubImage1DEXT = NULL;
PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC glGetCompressedTextureImageEXT = NULL;
PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC glCompressedMultiTexImage3DEXT = NULL;
PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC glCompressedMultiTexImage2DEXT = NULL;
PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC glCompressedMultiTexImage1DEXT = NULL;
PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC glCompressedMultiTexSubImage3DEXT = NULL;
PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC glCompressedMultiTexSubImage2DEXT = NULL;
PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC glCompressedMultiTexSubImage1DEXT = NULL;
PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC glGetCompressedMultiTexImageEXT = NULL;
PFNGLNAMEDPROGRAMSTRINGEXTPROC glNamedProgramStringEXT = NULL;
PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC glNamedProgramLocalParameter4dEXT = NULL;
PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC glNamedProgramLocalParameter4dvEXT = NULL;
PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC glNamedProgramLocalParameter4fEXT = NULL;
PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC glNamedProgramLocalParameter4fvEXT = NULL;
PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC glGetNamedProgramLocalParameterdvEXT = NULL;
PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC glGetNamedProgramLocalParameterfvEXT = NULL;
PFNGLGETNAMEDPROGRAMIVEXTPROC glGetNamedProgramivEXT = NULL;
PFNGLGETNAMEDPROGRAMSTRINGEXTPROC glGetNamedProgramStringEXT = NULL;
PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC glNamedProgramLocalParameters4fvEXT = NULL;
PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC glNamedProgramLocalParameterI4iEXT = NULL;
PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC glNamedProgramLocalParameterI4ivEXT = NULL;
PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC glNamedProgramLocalParametersI4ivEXT = NULL;
PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC glNamedProgramLocalParameterI4uiEXT = NULL;
PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC glNamedProgramLocalParameterI4uivEXT = NULL;
PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC glNamedProgramLocalParametersI4uivEXT = NULL;
PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC glGetNamedProgramLocalParameterIivEXT = NULL;
PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC glGetNamedProgramLocalParameterIuivEXT = NULL;
PFNGLTEXTUREPARAMETERIIVEXTPROC glTextureParameterIivEXT = NULL;
PFNGLTEXTUREPARAMETERIUIVEXTPROC glTextureParameterIuivEXT = NULL;
PFNGLGETTEXTUREPARAMETERIIVEXTPROC glGetTextureParameterIivEXT = NULL;
PFNGLGETTEXTUREPARAMETERIUIVEXTPROC glGetTextureParameterIuivEXT = NULL;
PFNGLMULTITEXPARAMETERIIVEXTPROC glMultiTexParameterIivEXT = NULL;
PFNGLMULTITEXPARAMETERIUIVEXTPROC glMultiTexParameterIuivEXT = NULL;
PFNGLGETMULTITEXPARAMETERIIVEXTPROC glGetMultiTexParameterIivEXT = NULL;
PFNGLGETMULTITEXPARAMETERIUIVEXTPROC glGetMultiTexParameterIuivEXT = NULL;
PFNGLPROGRAMUNIFORM1FEXTPROC glProgramUniform1fEXT = NULL;
PFNGLPROGRAMUNIFORM2FEXTPROC glProgramUniform2fEXT = NULL;
PFNGLPROGRAMUNIFORM3FEXTPROC glProgramUniform3fEXT = NULL;
PFNGLPROGRAMUNIFORM4FEXTPROC glProgramUniform4fEXT = NULL;
PFNGLPROGRAMUNIFORM1IEXTPROC glProgramUniform1iEXT = NULL;
PFNGLPROGRAMUNIFORM2IEXTPROC glProgramUniform2iEXT = NULL;
PFNGLPROGRAMUNIFORM3IEXTPROC glProgramUniform3iEXT = NULL;
PFNGLPROGRAMUNIFORM4IEXTPROC glProgramUniform4iEXT = NULL;
PFNGLPROGRAMUNIFORM1FVEXTPROC glProgramUniform1fvEXT = NULL;
PFNGLPROGRAMUNIFORM2FVEXTPROC glProgramUniform2fvEXT = NULL;
PFNGLPROGRAMUNIFORM3FVEXTPROC glProgramUniform3fvEXT = NULL;
PFNGLPROGRAMUNIFORM4FVEXTPROC glProgramUniform4fvEXT = NULL;
PFNGLPROGRAMUNIFORM1IVEXTPROC glProgramUniform1ivEXT = NULL;
PFNGLPROGRAMUNIFORM2IVEXTPROC glProgramUniform2ivEXT = NULL;
PFNGLPROGRAMUNIFORM3IVEXTPROC glProgramUniform3ivEXT = NULL;
PFNGLPROGRAMUNIFORM4IVEXTPROC glProgramUniform4ivEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC glProgramUniformMatrix2fvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC glProgramUniformMatrix3fvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC glProgramUniformMatrix4fvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC glProgramUniformMatrix2x3fvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC glProgramUniformMatrix3x2fvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC glProgramUniformMatrix2x4fvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC glProgramUniformMatrix4x2fvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC glProgramUniformMatrix3x4fvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC glProgramUniformMatrix4x3fvEXT = NULL;
PFNGLPROGRAMUNIFORM1UIEXTPROC glProgramUniform1uiEXT = NULL;
PFNGLPROGRAMUNIFORM2UIEXTPROC glProgramUniform2uiEXT = NULL;
PFNGLPROGRAMUNIFORM3UIEXTPROC glProgramUniform3uiEXT = NULL;
PFNGLPROGRAMUNIFORM4UIEXTPROC glProgramUniform4uiEXT = NULL;
PFNGLPROGRAMUNIFORM1UIVEXTPROC glProgramUniform1uivEXT = NULL;
PFNGLPROGRAMUNIFORM2UIVEXTPROC glProgramUniform2uivEXT = NULL;
PFNGLPROGRAMUNIFORM3UIVEXTPROC glProgramUniform3uivEXT = NULL;
PFNGLPROGRAMUNIFORM4UIVEXTPROC glProgramUniform4uivEXT = NULL;
PFNGLNAMEDBUFFERDATAEXTPROC glNamedBufferDataEXT = NULL;
PFNGLNAMEDBUFFERSUBDATAEXTPROC glNamedBufferSubDataEXT = NULL;
PFNGLMAPNAMEDBUFFEREXTPROC glMapNamedBufferEXT = NULL;
PFNGLUNMAPNAMEDBUFFEREXTPROC glUnmapNamedBufferEXT = NULL;
PFNGLMAPNAMEDBUFFERRANGEEXTPROC glMapNamedBufferRangeEXT = NULL;
PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC glFlushMappedNamedBufferRangeEXT = NULL;
PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC glNamedCopyBufferSubDataEXT = NULL;
PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC glGetNamedBufferParameterivEXT = NULL;
PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glGetNamedBufferPointervEXT = NULL;
PFNGLGETNAMEDBUFFERSUBDATAEXTPROC glGetNamedBufferSubDataEXT = NULL;
PFNGLTEXTUREBUFFEREXTPROC glTextureBufferEXT = NULL;
PFNGLMULTITEXBUFFEREXTPROC glMultiTexBufferEXT = NULL;
PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glNamedRenderbufferStorageEXT = NULL;
PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC glGetNamedRenderbufferParameterivEXT = NULL;
PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glCheckNamedFramebufferStatusEXT = NULL;
PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC glNamedFramebufferTexture1DEXT = NULL;
PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC glNamedFramebufferTexture2DEXT = NULL;
PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC glNamedFramebufferTexture3DEXT = NULL;
PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glNamedFramebufferRenderbufferEXT = NULL;
PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetNamedFramebufferAttachmentParameterivEXT = NULL;
PFNGLGENERATETEXTUREMIPMAPEXTPROC glGenerateTextureMipmapEXT = NULL;
PFNGLGENERATEMULTITEXMIPMAPEXTPROC glGenerateMultiTexMipmapEXT = NULL;
PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glFramebufferDrawBufferEXT = NULL;
PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glFramebufferDrawBuffersEXT = NULL;
PFNGLFRAMEBUFFERREADBUFFEREXTPROC glFramebufferReadBufferEXT = NULL;
PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC glGetFramebufferParameterivEXT = NULL;
PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glNamedRenderbufferStorageMultisampleEXT = NULL;
PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC glNamedRenderbufferStorageMultisampleCoverageEXT = NULL;
PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glNamedFramebufferTextureEXT = NULL;
PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glNamedFramebufferTextureLayerEXT = NULL;
PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC glNamedFramebufferTextureFaceEXT = NULL;
PFNGLTEXTURERENDERBUFFEREXTPROC glTextureRenderbufferEXT = NULL;
PFNGLMULTITEXRENDERBUFFEREXTPROC glMultiTexRenderbufferEXT = NULL;
PFNGLPROGRAMUNIFORM1DEXTPROC glProgramUniform1dEXT = NULL;
PFNGLPROGRAMUNIFORM2DEXTPROC glProgramUniform2dEXT = NULL;
PFNGLPROGRAMUNIFORM3DEXTPROC glProgramUniform3dEXT = NULL;
PFNGLPROGRAMUNIFORM4DEXTPROC glProgramUniform4dEXT = NULL;
PFNGLPROGRAMUNIFORM1DVEXTPROC glProgramUniform1dvEXT = NULL;
PFNGLPROGRAMUNIFORM2DVEXTPROC glProgramUniform2dvEXT = NULL;
PFNGLPROGRAMUNIFORM3DVEXTPROC glProgramUniform3dvEXT = NULL;
PFNGLPROGRAMUNIFORM4DVEXTPROC glProgramUniform4dvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC glProgramUniformMatrix2dvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC glProgramUniformMatrix3dvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC glProgramUniformMatrix4dvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC glProgramUniformMatrix2x3dvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC glProgramUniformMatrix2x4dvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC glProgramUniformMatrix3x2dvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC glProgramUniformMatrix3x4dvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC glProgramUniformMatrix4x2dvEXT = NULL;
PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC glProgramUniformMatrix4x3dvEXT = NULL;

bool GL_EXT_vertex_array_bgra_supported = false;
bool GL_EXT_texture_swizzle_supported = false;
bool GL_NV_explicit_multisample_supported = false;
PFNGLGETMULTISAMPLEFVNVPROC glGetMultisamplefvNV = NULL;
PFNGLSAMPLEMASKINDEXEDNVPROC glSampleMaskIndexedNV = NULL;
PFNGLTEXRENDERBUFFERNVPROC glTexRenderbufferNV = NULL;

bool GL_NV_transform_feedback2_supported = false;
PFNGLBINDTRANSFORMFEEDBACKNVPROC glBindTransformFeedbackNV = NULL;
PFNGLDELETETRANSFORMFEEDBACKSNVPROC glDeleteTransformFeedbacksNV = NULL;
PFNGLGENTRANSFORMFEEDBACKSNVPROC glGenTransformFeedbacksNV = NULL;
PFNGLISTRANSFORMFEEDBACKNVPROC glIsTransformFeedbackNV = NULL;
PFNGLPAUSETRANSFORMFEEDBACKNVPROC glPauseTransformFeedbackNV = NULL;
PFNGLRESUMETRANSFORMFEEDBACKNVPROC glResumeTransformFeedbackNV = NULL;
PFNGLDRAWTRANSFORMFEEDBACKNVPROC glDrawTransformFeedbackNV = NULL;

bool GL_ATI_meminfo_supported = false;
bool GL_AMD_performance_monitor_supported = false;
PFNGLGETPERFMONITORGROUPSAMDPROC glGetPerfMonitorGroupsAMD = NULL;
PFNGLGETPERFMONITORCOUNTERSAMDPROC glGetPerfMonitorCountersAMD = NULL;
PFNGLGETPERFMONITORGROUPSTRINGAMDPROC glGetPerfMonitorGroupStringAMD = NULL;
PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC glGetPerfMonitorCounterStringAMD = NULL;
PFNGLGETPERFMONITORCOUNTERINFOAMDPROC glGetPerfMonitorCounterInfoAMD = NULL;
PFNGLGENPERFMONITORSAMDPROC glGenPerfMonitorsAMD = NULL;
PFNGLDELETEPERFMONITORSAMDPROC glDeletePerfMonitorsAMD = NULL;
PFNGLSELECTPERFMONITORCOUNTERSAMDPROC glSelectPerfMonitorCountersAMD = NULL;
PFNGLBEGINPERFMONITORAMDPROC glBeginPerfMonitorAMD = NULL;
PFNGLENDPERFMONITORAMDPROC glEndPerfMonitorAMD = NULL;
PFNGLGETPERFMONITORCOUNTERDATAAMDPROC glGetPerfMonitorCounterDataAMD = NULL;

bool GL_AMD_texture_texture4_supported = false;
bool GL_AMD_vertex_shader_tesselator_supported = false;
PFNGLTESSELLATIONFACTORAMDPROC glTessellationFactorAMD = NULL;
PFNGLTESSELLATIONMODEAMDPROC glTessellationModeAMD = NULL;

bool GL_EXT_provoking_vertex_supported = false;
PFNGLPROVOKINGVERTEXEXTPROC glProvokingVertexEXT = NULL;

bool GL_EXT_texture_snorm_supported = false;
bool GL_AMD_draw_buffers_blend_supported = false;
PFNGLBLENDFUNCINDEXEDAMDPROC glBlendFuncIndexedAMD = NULL;
PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC glBlendFuncSeparateIndexedAMD = NULL;
PFNGLBLENDEQUATIONINDEXEDAMDPROC glBlendEquationIndexedAMD = NULL;
PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC glBlendEquationSeparateIndexedAMD = NULL;

bool GL_APPLE_texture_range_supported = false;
PFNGLTEXTURERANGEAPPLEPROC glTextureRangeAPPLE = NULL;
PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC glGetTexParameterPointervAPPLE = NULL;

bool GL_APPLE_float_pixels_supported = false;
bool GL_APPLE_vertex_program_evaluators_supported = false;
PFNGLENABLEVERTEXATTRIBAPPLEPROC glEnableVertexAttribAPPLE = NULL;
PFNGLDISABLEVERTEXATTRIBAPPLEPROC glDisableVertexAttribAPPLE = NULL;
PFNGLISVERTEXATTRIBENABLEDAPPLEPROC glIsVertexAttribEnabledAPPLE = NULL;
PFNGLMAPVERTEXATTRIB1DAPPLEPROC glMapVertexAttrib1dAPPLE = NULL;
PFNGLMAPVERTEXATTRIB1FAPPLEPROC glMapVertexAttrib1fAPPLE = NULL;
PFNGLMAPVERTEXATTRIB2DAPPLEPROC glMapVertexAttrib2dAPPLE = NULL;
PFNGLMAPVERTEXATTRIB2FAPPLEPROC glMapVertexAttrib2fAPPLE = NULL;

bool GL_APPLE_aux_depth_stencil_supported = false;
bool GL_APPLE_object_purgeable_supported = false;
PFNGLOBJECTPURGEABLEAPPLEPROC glObjectPurgeableAPPLE = NULL;
PFNGLOBJECTUNPURGEABLEAPPLEPROC glObjectUnpurgeableAPPLE = NULL;
PFNGLGETOBJECTPARAMETERIVAPPLEPROC glGetObjectParameterivAPPLE = NULL;

bool GL_APPLE_row_bytes_supported = false;
bool GL_APPLE_rgb_422_supported = false;
bool GL_NV_video_capture_supported = false;
PFNGLBEGINVIDEOCAPTURENVPROC glBeginVideoCaptureNV = NULL;
PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC glBindVideoCaptureStreamBufferNV = NULL;
PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC glBindVideoCaptureStreamTextureNV = NULL;
PFNGLENDVIDEOCAPTURENVPROC glEndVideoCaptureNV = NULL;
PFNGLGETVIDEOCAPTUREIVNVPROC glGetVideoCaptureivNV = NULL;
PFNGLGETVIDEOCAPTURESTREAMIVNVPROC glGetVideoCaptureStreamivNV = NULL;
PFNGLGETVIDEOCAPTURESTREAMFVNVPROC glGetVideoCaptureStreamfvNV = NULL;
PFNGLGETVIDEOCAPTURESTREAMDVNVPROC glGetVideoCaptureStreamdvNV = NULL;
PFNGLVIDEOCAPTURENVPROC glVideoCaptureNV = NULL;
PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC glVideoCaptureStreamParameterivNV = NULL;
PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC glVideoCaptureStreamParameterfvNV = NULL;
PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC glVideoCaptureStreamParameterdvNV = NULL;

bool GL_NV_copy_image_supported = false;
PFNGLCOPYIMAGESUBDATANVPROC glCopyImageSubDataNV = NULL;

bool GL_EXT_separate_shader_objects_supported = false;
PFNGLUSESHADERPROGRAMEXTPROC glUseShaderProgramEXT = NULL;
PFNGLACTIVEPROGRAMEXTPROC glActiveProgramEXT = NULL;
PFNGLCREATESHADERPROGRAMEXTPROC glCreateShaderProgramEXT = NULL;

bool GL_NV_parameter_buffer_object2_supported = false;
bool GL_NV_shader_buffer_load_supported = false;
PFNGLMAKEBUFFERRESIDENTNVPROC glMakeBufferResidentNV = NULL;
PFNGLMAKEBUFFERNONRESIDENTNVPROC glMakeBufferNonResidentNV = NULL;
PFNGLISBUFFERRESIDENTNVPROC glIsBufferResidentNV = NULL;
PFNGLMAKENAMEDBUFFERRESIDENTNVPROC glMakeNamedBufferResidentNV = NULL;
PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC glMakeNamedBufferNonResidentNV = NULL;
PFNGLISNAMEDBUFFERRESIDENTNVPROC glIsNamedBufferResidentNV = NULL;
PFNGLGETBUFFERPARAMETERUI64VNVPROC glGetBufferParameterui64vNV = NULL;
PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC glGetNamedBufferParameterui64vNV = NULL;
PFNGLGETINTEGERUI64VNVPROC glGetIntegerui64vNV = NULL;
PFNGLUNIFORMUI64NVPROC glUniformui64NV = NULL;
PFNGLUNIFORMUI64VNVPROC glUniformui64vNV = NULL;
PFNGLGETUNIFORMUI64VNVPROC glGetUniformui64vNV = NULL;
PFNGLPROGRAMUNIFORMUI64NVPROC glProgramUniformui64NV = NULL;
PFNGLPROGRAMUNIFORMUI64VNVPROC glProgramUniformui64vNV = NULL;

bool GL_NV_vertex_buffer_unified_memory_supported = false;
PFNGLBUFFERADDRESSRANGENVPROC glBufferAddressRangeNV = NULL;
PFNGLVERTEXFORMATNVPROC glVertexFormatNV = NULL;
PFNGLNORMALFORMATNVPROC glNormalFormatNV = NULL;
PFNGLCOLORFORMATNVPROC glColorFormatNV = NULL;
PFNGLINDEXFORMATNVPROC glIndexFormatNV = NULL;
PFNGLTEXCOORDFORMATNVPROC glTexCoordFormatNV = NULL;
PFNGLEDGEFLAGFORMATNVPROC glEdgeFlagFormatNV = NULL;
PFNGLSECONDARYCOLORFORMATNVPROC glSecondaryColorFormatNV = NULL;
PFNGLFOGCOORDFORMATNVPROC glFogCoordFormatNV = NULL;
PFNGLVERTEXATTRIBFORMATNVPROC glVertexAttribFormatNV = NULL;
PFNGLVERTEXATTRIBIFORMATNVPROC glVertexAttribIFormatNV = NULL;
PFNGLGETINTEGERUI64I_VNVPROC glGetIntegerui64i_vNV = NULL;

bool GL_NV_texture_barrier_supported = false;
PFNGLTEXTUREBARRIERNVPROC glTextureBarrierNV = NULL;

bool GL_AMD_shader_stencil_export_supported = false;
bool GL_AMD_seamless_cubemap_per_texture_supported = false;
bool GL_AMD_conservative_depth_supported = false;
bool GL_EXT_shader_image_load_store_supported = false;
PFNGLBINDIMAGETEXTUREEXTPROC glBindImageTextureEXT = NULL;
PFNGLMEMORYBARRIEREXTPROC glMemoryBarrierEXT = NULL;

bool GL_EXT_vertex_attrib_64bit_supported = false;
PFNGLVERTEXATTRIBL1DEXTPROC glVertexAttribL1dEXT = NULL;
PFNGLVERTEXATTRIBL2DEXTPROC glVertexAttribL2dEXT = NULL;
PFNGLVERTEXATTRIBL3DEXTPROC glVertexAttribL3dEXT = NULL;
PFNGLVERTEXATTRIBL4DEXTPROC glVertexAttribL4dEXT = NULL;
PFNGLVERTEXATTRIBL1DVEXTPROC glVertexAttribL1dvEXT = NULL;
PFNGLVERTEXATTRIBL2DVEXTPROC glVertexAttribL2dvEXT = NULL;
PFNGLVERTEXATTRIBL3DVEXTPROC glVertexAttribL3dvEXT = NULL;
PFNGLVERTEXATTRIBL4DVEXTPROC glVertexAttribL4dvEXT = NULL;
PFNGLVERTEXATTRIBLPOINTEREXTPROC glVertexAttribLPointerEXT = NULL;
PFNGLGETVERTEXATTRIBLDVEXTPROC glGetVertexAttribLdvEXT = NULL;
PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC glVertexArrayVertexAttribLOffsetEXT = NULL;

bool GL_NV_gpu_program5_supported = false;
PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC glProgramSubroutineParametersuivNV = NULL;
PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC glGetProgramSubroutineParameteruivNV = NULL;

bool GL_NV_gpu_shader5_supported = false;
PFNGLUNIFORM1I64NVPROC glUniform1i64NV = NULL;
PFNGLUNIFORM2I64NVPROC glUniform2i64NV = NULL;
PFNGLUNIFORM3I64NVPROC glUniform3i64NV = NULL;
PFNGLUNIFORM4I64NVPROC glUniform4i64NV = NULL;
PFNGLUNIFORM1I64VNVPROC glUniform1i64vNV = NULL;
PFNGLUNIFORM2I64VNVPROC glUniform2i64vNV = NULL;
PFNGLUNIFORM3I64VNVPROC glUniform3i64vNV = NULL;
PFNGLUNIFORM4I64VNVPROC glUniform4i64vNV = NULL;
PFNGLUNIFORM1UI64NVPROC glUniform1ui64NV = NULL;
PFNGLUNIFORM2UI64NVPROC glUniform2ui64NV = NULL;
PFNGLUNIFORM3UI64NVPROC glUniform3ui64NV = NULL;
PFNGLUNIFORM4UI64NVPROC glUniform4ui64NV = NULL;
PFNGLUNIFORM1UI64VNVPROC glUniform1ui64vNV = NULL;
PFNGLUNIFORM2UI64VNVPROC glUniform2ui64vNV = NULL;
PFNGLUNIFORM3UI64VNVPROC glUniform3ui64vNV = NULL;
PFNGLUNIFORM4UI64VNVPROC glUniform4ui64vNV = NULL;
PFNGLGETUNIFORMI64VNVPROC glGetUniformi64vNV = NULL;
PFNGLPROGRAMUNIFORM1I64NVPROC glProgramUniform1i64NV = NULL;
PFNGLPROGRAMUNIFORM2I64NVPROC glProgramUniform2i64NV = NULL;
PFNGLPROGRAMUNIFORM3I64NVPROC glProgramUniform3i64NV = NULL;
PFNGLPROGRAMUNIFORM4I64NVPROC glProgramUniform4i64NV = NULL;
PFNGLPROGRAMUNIFORM1I64VNVPROC glProgramUniform1i64vNV = NULL;
PFNGLPROGRAMUNIFORM2I64VNVPROC glProgramUniform2i64vNV = NULL;
PFNGLPROGRAMUNIFORM3I64VNVPROC glProgramUniform3i64vNV = NULL;
PFNGLPROGRAMUNIFORM4I64VNVPROC glProgramUniform4i64vNV = NULL;
PFNGLPROGRAMUNIFORM1UI64NVPROC glProgramUniform1ui64NV = NULL;
PFNGLPROGRAMUNIFORM2UI64NVPROC glProgramUniform2ui64NV = NULL;
PFNGLPROGRAMUNIFORM3UI64NVPROC glProgramUniform3ui64NV = NULL;
PFNGLPROGRAMUNIFORM4UI64NVPROC glProgramUniform4ui64NV = NULL;
PFNGLPROGRAMUNIFORM1UI64VNVPROC glProgramUniform1ui64vNV = NULL;
PFNGLPROGRAMUNIFORM2UI64VNVPROC glProgramUniform2ui64vNV = NULL;
PFNGLPROGRAMUNIFORM3UI64VNVPROC glProgramUniform3ui64vNV = NULL;
PFNGLPROGRAMUNIFORM4UI64VNVPROC glProgramUniform4ui64vNV = NULL;

bool GL_NV_shader_buffer_store_supported = false;
bool GL_NV_tessellation_program5_supported = false;
bool GL_NV_vertex_attrib_integer_64bit_supported = false;
PFNGLVERTEXATTRIBL1I64NVPROC glVertexAttribL1i64NV = NULL;
PFNGLVERTEXATTRIBL2I64NVPROC glVertexAttribL2i64NV = NULL;
PFNGLVERTEXATTRIBL3I64NVPROC glVertexAttribL3i64NV = NULL;
PFNGLVERTEXATTRIBL4I64NVPROC glVertexAttribL4i64NV = NULL;
PFNGLVERTEXATTRIBL1I64VNVPROC glVertexAttribL1i64vNV = NULL;
PFNGLVERTEXATTRIBL2I64VNVPROC glVertexAttribL2i64vNV = NULL;
PFNGLVERTEXATTRIBL3I64VNVPROC glVertexAttribL3i64vNV = NULL;
PFNGLVERTEXATTRIBL4I64VNVPROC glVertexAttribL4i64vNV = NULL;
PFNGLVERTEXATTRIBL1UI64NVPROC glVertexAttribL1ui64NV = NULL;
PFNGLVERTEXATTRIBL2UI64NVPROC glVertexAttribL2ui64NV = NULL;
PFNGLVERTEXATTRIBL3UI64NVPROC glVertexAttribL3ui64NV = NULL;
PFNGLVERTEXATTRIBL4UI64NVPROC glVertexAttribL4ui64NV = NULL;
PFNGLVERTEXATTRIBL1UI64VNVPROC glVertexAttribL1ui64vNV = NULL;
PFNGLVERTEXATTRIBL2UI64VNVPROC glVertexAttribL2ui64vNV = NULL;
PFNGLVERTEXATTRIBL3UI64VNVPROC glVertexAttribL3ui64vNV = NULL;
PFNGLVERTEXATTRIBL4UI64VNVPROC glVertexAttribL4ui64vNV = NULL;
PFNGLGETVERTEXATTRIBLI64VNVPROC glGetVertexAttribLi64vNV = NULL;
PFNGLGETVERTEXATTRIBLUI64VNVPROC glGetVertexAttribLui64vNV = NULL;
PFNGLVERTEXATTRIBLFORMATNVPROC glVertexAttribLFormatNV = NULL;

bool GL_NV_multisample_coverage_supported = false;
bool GL_AMD_name_gen_delete_supported = false;
PFNGLGENNAMESAMDPROC glGenNamesAMD = NULL;
PFNGLDELETENAMESAMDPROC glDeleteNamesAMD = NULL;
PFNGLISNAMEAMDPROC glIsNameAMD = NULL;

bool GL_AMD_debug_output_supported = false;
PFNGLDEBUGMESSAGEENABLEAMDPROC glDebugMessageEnableAMD = NULL;
PFNGLDEBUGMESSAGEINSERTAMDPROC glDebugMessageInsertAMD = NULL;
PFNGLDEBUGMESSAGECALLBACKAMDPROC glDebugMessageCallbackAMD = NULL;
PFNGLGETDEBUGMESSAGELOGAMDPROC glGetDebugMessageLogAMD = NULL;

bool GL_NV_vdpau_interop_supported = false;
PFNGLVDPAUINITNVPROC glVDPAUInitNV = NULL;
PFNGLVDPAUFININVPROC glVDPAUFiniNV = NULL;
PFNGLVDPAUREGISTERVIDEOSURFACENVPROC glVDPAURegisterVideoSurfaceNV = NULL;
PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC glVDPAURegisterOutputSurfaceNV = NULL;
PFNGLVDPAUISSURFACENVPROC glVDPAUIsSurfaceNV = NULL;
PFNGLVDPAUUNREGISTERSURFACENVPROC glVDPAUUnregisterSurfaceNV = NULL;
PFNGLVDPAUGETSURFACEIVNVPROC glVDPAUGetSurfaceivNV = NULL;
PFNGLVDPAUSURFACEACCESSNVPROC glVDPAUSurfaceAccessNV = NULL;
PFNGLVDPAUMAPSURFACESNVPROC glVDPAUMapSurfacesNV = NULL;
PFNGLVDPAUUNMAPSURFACESNVPROC glVDPAUUnmapSurfacesNV = NULL;

bool GL_AMD_transform_feedback3_lines_triangles_supported = false;
bool GL_AMD_depth_clamp_separate_supported = false;
bool GL_EXT_texture_sRGB_decode_supported = false;
bool GL_NV_texture_multisample_supported = false;
PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC glTexImage2DMultisampleCoverageNV = NULL;
PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC glTexImage3DMultisampleCoverageNV = NULL;
PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC glTextureImage2DMultisampleNV = NULL;
PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC glTextureImage3DMultisampleNV = NULL;
PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC glTextureImage2DMultisampleCoverageNV = NULL;
PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC glTextureImage3DMultisampleCoverageNV = NULL;

bool GL_AMD_blend_minmax_factor_supported = false;
bool GL_AMD_sample_positions_supported = false;
PFNGLSETMULTISAMPLEFVAMDPROC glSetMultisamplefvAMD = NULL;

bool GL_EXT_x11_sync_object_supported = false;
PFNGLIMPORTSYNCEXTPROC glImportSyncEXT = NULL;

bool GL_AMD_multi_draw_indirect_supported = false;
PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC glMultiDrawArraysIndirectAMD = NULL;
PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC glMultiDrawElementsIndirectAMD = NULL;

bool GL_EXT_framebuffer_multisample_blit_scaled_supported = false;
bool GL_NV_path_rendering_supported = false;
PFNGLGENPATHSNVPROC glGenPathsNV = NULL;
PFNGLDELETEPATHSNVPROC glDeletePathsNV = NULL;
PFNGLISPATHNVPROC glIsPathNV = NULL;
PFNGLPATHCOMMANDSNVPROC glPathCommandsNV = NULL;
PFNGLPATHCOORDSNVPROC glPathCoordsNV = NULL;
PFNGLPATHSUBCOMMANDSNVPROC glPathSubCommandsNV = NULL;
PFNGLPATHSUBCOORDSNVPROC glPathSubCoordsNV = NULL;
PFNGLPATHSTRINGNVPROC glPathStringNV = NULL;
PFNGLPATHGLYPHSNVPROC glPathGlyphsNV = NULL;
PFNGLPATHGLYPHRANGENVPROC glPathGlyphRangeNV = NULL;
PFNGLWEIGHTPATHSNVPROC glWeightPathsNV = NULL;
PFNGLCOPYPATHNVPROC glCopyPathNV = NULL;
PFNGLINTERPOLATEPATHSNVPROC glInterpolatePathsNV = NULL;
PFNGLTRANSFORMPATHNVPROC glTransformPathNV = NULL;
PFNGLPATHPARAMETERIVNVPROC glPathParameterivNV = NULL;
PFNGLPATHPARAMETERINVPROC glPathParameteriNV = NULL;
PFNGLPATHPARAMETERFVNVPROC glPathParameterfvNV = NULL;
PFNGLPATHPARAMETERFNVPROC glPathParameterfNV = NULL;
PFNGLPATHDASHARRAYNVPROC glPathDashArrayNV = NULL;
PFNGLPATHSTENCILFUNCNVPROC glPathStencilFuncNV = NULL;
PFNGLPATHSTENCILDEPTHOFFSETNVPROC glPathStencilDepthOffsetNV = NULL;
PFNGLSTENCILFILLPATHNVPROC glStencilFillPathNV = NULL;
PFNGLSTENCILSTROKEPATHNVPROC glStencilStrokePathNV = NULL;
PFNGLSTENCILFILLPATHINSTANCEDNVPROC glStencilFillPathInstancedNV = NULL;
PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC glStencilStrokePathInstancedNV = NULL;
PFNGLPATHCOVERDEPTHFUNCNVPROC glPathCoverDepthFuncNV = NULL;
PFNGLPATHCOLORGENNVPROC glPathColorGenNV = NULL;
PFNGLPATHTEXGENNVPROC glPathTexGenNV = NULL;
PFNGLPATHFOGGENNVPROC glPathFogGenNV = NULL;
PFNGLCOVERFILLPATHNVPROC glCoverFillPathNV = NULL;
PFNGLCOVERSTROKEPATHNVPROC glCoverStrokePathNV = NULL;
PFNGLCOVERFILLPATHINSTANCEDNVPROC glCoverFillPathInstancedNV = NULL;
PFNGLCOVERSTROKEPATHINSTANCEDNVPROC glCoverStrokePathInstancedNV = NULL;
PFNGLGETPATHPARAMETERIVNVPROC glGetPathParameterivNV = NULL;
PFNGLGETPATHPARAMETERFVNVPROC glGetPathParameterfvNV = NULL;
PFNGLGETPATHCOMMANDSNVPROC glGetPathCommandsNV = NULL;
PFNGLGETPATHCOORDSNVPROC glGetPathCoordsNV = NULL;
PFNGLGETPATHDASHARRAYNVPROC glGetPathDashArrayNV = NULL;
PFNGLGETPATHMETRICSNVPROC glGetPathMetricsNV = NULL;
PFNGLGETPATHMETRICRANGENVPROC glGetPathMetricRangeNV = NULL;
PFNGLGETPATHSPACINGNVPROC glGetPathSpacingNV = NULL;
PFNGLGETPATHCOLORGENIVNVPROC glGetPathColorGenivNV = NULL;
PFNGLGETPATHCOLORGENFVNVPROC glGetPathColorGenfvNV = NULL;
PFNGLGETPATHTEXGENIVNVPROC glGetPathTexGenivNV = NULL;
PFNGLGETPATHTEXGENFVNVPROC glGetPathTexGenfvNV = NULL;
PFNGLISPOINTINFILLPATHNVPROC glIsPointInFillPathNV = NULL;
PFNGLISPOINTINSTROKEPATHNVPROC glIsPointInStrokePathNV = NULL;
PFNGLGETPATHLENGTHNVPROC glGetPathLengthNV = NULL;
PFNGLPOINTALONGPATHNVPROC glPointAlongPathNV = NULL;

bool GL_AMD_pinned_memory_supported = false;
bool GL_AMD_stencil_operation_extended_supported = false;
PFNGLSTENCILOPVALUEAMDPROC glStencilOpValueAMD = NULL;

bool GL_AMD_vertex_shader_viewport_index_supported = false;
bool GL_AMD_vertex_shader_layer_supported = false;
bool GL_NV_bindless_texture_supported = false;
PFNGLGETTEXTUREHANDLENVPROC glGetTextureHandleNV = NULL;
PFNGLGETTEXTURESAMPLERHANDLENVPROC glGetTextureSamplerHandleNV = NULL;
PFNGLMAKETEXTUREHANDLERESIDENTNVPROC glMakeTextureHandleResidentNV = NULL;
PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC glMakeTextureHandleNonResidentNV = NULL;
PFNGLGETIMAGEHANDLENVPROC glGetImageHandleNV = NULL;
PFNGLMAKEIMAGEHANDLERESIDENTNVPROC glMakeImageHandleResidentNV = NULL;
PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC glMakeImageHandleNonResidentNV = NULL;
PFNGLUNIFORMHANDLEUI64NVPROC glUniformHandleui64NV = NULL;
PFNGLUNIFORMHANDLEUI64VNVPROC glUniformHandleui64vNV = NULL;
PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC glProgramUniformHandleui64NV = NULL;
PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC glProgramUniformHandleui64vNV = NULL;
PFNGLISTEXTUREHANDLERESIDENTNVPROC glIsTextureHandleResidentNV = NULL;
PFNGLISIMAGEHANDLERESIDENTNVPROC glIsImageHandleResidentNV = NULL;

bool GL_NV_shader_atomic_float_supported = false;
bool GL_AMD_query_buffer_object_supported = false;
bool GL_AMD_sparse_texture_supported = false;
PFNGLTEXSTORAGESPARSEAMDPROC glTexStorageSparseAMD = NULL;
PFNGLTEXTURESTORAGESPARSEAMDPROC glTextureStorageSparseAMD = NULL;



bool initFunctions()
{
    static bool init = false;
    if(init == true) return true;
    init = true;
    
    #ifdef OS_WINDOWS
    
    GL_VERSION_1_0_supported = true;
    {
        glCullFace = ::glCullFace;
        glFrontFace = ::glFrontFace;
        glHint = ::glHint;
        glLineWidth = ::glLineWidth;
        glPointSize = ::glPointSize;
        glPolygonMode = ::glPolygonMode;
        glScissor = ::glScissor;
        glTexParameterf = ::glTexParameterf;
        glTexParameterfv = ::glTexParameterfv;
        glTexParameteri = ::glTexParameteri;
        glTexParameteriv = ::glTexParameteriv;
        glTexImage1D = ::glTexImage1D;
        glTexImage2D = ::glTexImage2D;
        glDrawBuffer = ::glDrawBuffer;
        glClear = ::glClear;
        glClearColor = ::glClearColor;
        glClearStencil = ::glClearStencil;
        glClearDepth = ::glClearDepth;
        glStencilMask = ::glStencilMask;
        glColorMask = ::glColorMask;
        glDepthMask = ::glDepthMask;
        glDisable = ::glDisable;
        glEnable = ::glEnable;
        glFinish = ::glFinish;
        glFlush = ::glFlush;
        glBlendFunc = ::glBlendFunc;
        glLogicOp = ::glLogicOp;
        glStencilFunc = ::glStencilFunc;
        glStencilOp = ::glStencilOp;
        glDepthFunc = ::glDepthFunc;
        glPixelStoref = ::glPixelStoref;
        glPixelStorei = ::glPixelStorei;
        glReadBuffer = ::glReadBuffer;
        glReadPixels = ::glReadPixels;
        glGetBooleanv = ::glGetBooleanv;
        glGetDoublev = ::glGetDoublev;
        glGetError = ::glGetError;
        glGetFloatv = ::glGetFloatv;
        glGetIntegerv = ::glGetIntegerv;
        glGetString = ::glGetString;
        glGetTexImage = ::glGetTexImage;
        glGetTexParameterfv = ::glGetTexParameterfv;
        glGetTexParameteriv = ::glGetTexParameteriv;
        glGetTexLevelParameterfv = ::glGetTexLevelParameterfv;
        glGetTexLevelParameteriv = ::glGetTexLevelParameteriv;
        glIsEnabled = ::glIsEnabled;
        glDepthRange = ::glDepthRange;
        glViewport = ::glViewport;
    }
    
    GL_VERSION_1_1_supported = true;
    {
        glDrawArrays = ::glDrawArrays;
        glDrawElements = ::glDrawElements;
        glGetPointerv = ::glGetPointerv;
        glPolygonOffset = ::glPolygonOffset;
        glCopyTexImage1D = ::glCopyTexImage1D;
        glCopyTexImage2D = ::glCopyTexImage2D;
        glCopyTexSubImage1D = ::glCopyTexSubImage1D;
        glCopyTexSubImage2D = ::glCopyTexSubImage2D;
        glTexSubImage1D = ::glTexSubImage1D;
        glTexSubImage2D = ::glTexSubImage2D;
        glBindTexture = ::glBindTexture;
        glDeleteTextures = ::glDeleteTextures;
        glGenTextures = ::glGenTextures;
        glIsTexture = ::glIsTexture;
    }
    
    #else
    
    GL_VERSION_1_0_supported = false;
    {
        if(getProcAddress("glCullFace", glCullFace, false) == true
            && getProcAddress("glFrontFace", glFrontFace, false) == true
            && getProcAddress("glHint", glHint, false) == true
            && getProcAddress("glLineWidth", glLineWidth, false) == true
            && getProcAddress("glPointSize", glPointSize, false) == true
            && getProcAddress("glPolygonMode", glPolygonMode, false) == true
            && getProcAddress("glScissor", glScissor, false) == true
            && getProcAddress("glTexParameterf", glTexParameterf, false) == true
            && getProcAddress("glTexParameterfv", glTexParameterfv, false) == true
            && getProcAddress("glTexParameteri", glTexParameteri, false) == true
            && getProcAddress("glTexParameteriv", glTexParameteriv, false) == true
            && getProcAddress("glTexImage1D", glTexImage1D, false) == true
            && getProcAddress("glTexImage2D", glTexImage2D, false) == true
            && getProcAddress("glDrawBuffer", glDrawBuffer, false) == true
            && getProcAddress("glClear", glClear, false) == true
            && getProcAddress("glClearColor", glClearColor, false) == true
            && getProcAddress("glClearStencil", glClearStencil, false) == true
            && getProcAddress("glClearDepth", glClearDepth, false) == true
            && getProcAddress("glStencilMask", glStencilMask, false) == true
            && getProcAddress("glColorMask", glColorMask, false) == true
            && getProcAddress("glDepthMask", glDepthMask, false) == true
            && getProcAddress("glDisable", glDisable, false) == true
            && getProcAddress("glEnable", glEnable, false) == true
            && getProcAddress("glFinish", glFinish, false) == true
            && getProcAddress("glFlush", glFlush, false) == true
            && getProcAddress("glBlendFunc", glBlendFunc, false) == true
            && getProcAddress("glLogicOp", glLogicOp, false) == true
            && getProcAddress("glStencilFunc", glStencilFunc, false) == true
            && getProcAddress("glStencilOp", glStencilOp, false) == true
            && getProcAddress("glDepthFunc", glDepthFunc, false) == true
            && getProcAddress("glPixelStoref", glPixelStoref, false) == true
            && getProcAddress("glPixelStorei", glPixelStorei, false) == true
            && getProcAddress("glReadBuffer", glReadBuffer, false) == true
            && getProcAddress("glReadPixels", glReadPixels, false) == true
            && getProcAddress("glGetBooleanv", glGetBooleanv, false) == true
            && getProcAddress("glGetDoublev", glGetDoublev, false) == true
            && getProcAddress("glGetError", glGetError, false) == true
            && getProcAddress("glGetFloatv", glGetFloatv, false) == true
            && getProcAddress("glGetIntegerv", glGetIntegerv, false) == true
            && getProcAddress("glGetString", glGetString, false) == true
            && getProcAddress("glGetTexImage", glGetTexImage, false) == true
            && getProcAddress("glGetTexParameterfv", glGetTexParameterfv, false) == true
            && getProcAddress("glGetTexParameteriv", glGetTexParameteriv, false) == true
            && getProcAddress("glGetTexLevelParameterfv", glGetTexLevelParameterfv, false) == true
            && getProcAddress("glGetTexLevelParameteriv", glGetTexLevelParameteriv, false) == true
            && getProcAddress("glIsEnabled", glIsEnabled, false) == true
            && getProcAddress("glDepthRange", glDepthRange, false) == true
            && getProcAddress("glViewport", glViewport, false) == true
        ){
            GL_VERSION_1_0_supported = true;
        }
    }

    GL_VERSION_1_1_supported = false;
    {
        if(getProcAddress("glDrawArrays", glDrawArrays, false) == true
            && getProcAddress("glDrawElements", glDrawElements, false) == true
            && getProcAddress("glGetPointerv", glGetPointerv, false) == true
            && getProcAddress("glPolygonOffset", glPolygonOffset, false) == true
            && getProcAddress("glCopyTexImage1D", glCopyTexImage1D, false) == true
            && getProcAddress("glCopyTexImage2D", glCopyTexImage2D, false) == true
            && getProcAddress("glCopyTexSubImage1D", glCopyTexSubImage1D, false) == true
            && getProcAddress("glCopyTexSubImage2D", glCopyTexSubImage2D, false) == true
            && getProcAddress("glTexSubImage1D", glTexSubImage1D, false) == true
            && getProcAddress("glTexSubImage2D", glTexSubImage2D, false) == true
            && getProcAddress("glBindTexture", glBindTexture, false) == true
            && getProcAddress("glDeleteTextures", glDeleteTextures, false) == true
            && getProcAddress("glGenTextures", glGenTextures, false) == true
            && getProcAddress("glIsTexture", glIsTexture, false) == true
        ){
            GL_VERSION_1_1_supported = true;
        }
    }
    
    #endif

    GL_VERSION_1_2_supported = false;
    {
        if(getProcAddress("glBlendColor", glBlendColor, false) == true
            && getProcAddress("glBlendEquation", glBlendEquation, false) == true
            && getProcAddress("glDrawRangeElements", glDrawRangeElements, false) == true
            && getProcAddress("glTexImage3D", glTexImage3D, false) == true
            && getProcAddress("glTexSubImage3D", glTexSubImage3D, false) == true
            && getProcAddress("glCopyTexSubImage3D", glCopyTexSubImage3D, false) == true
        ){
            GL_VERSION_1_2_supported = true;
        }
    }

    GL_VERSION_1_3_supported = false;
    {
        if(getProcAddress("glActiveTexture", glActiveTexture, false) == true
            && getProcAddress("glSampleCoverage", glSampleCoverage, false) == true
            && getProcAddress("glCompressedTexImage3D", glCompressedTexImage3D, false) == true
            && getProcAddress("glCompressedTexImage2D", glCompressedTexImage2D, false) == true
            && getProcAddress("glCompressedTexImage1D", glCompressedTexImage1D, false) == true
            && getProcAddress("glCompressedTexSubImage3D", glCompressedTexSubImage3D, false) == true
            && getProcAddress("glCompressedTexSubImage2D", glCompressedTexSubImage2D, false) == true
            && getProcAddress("glCompressedTexSubImage1D", glCompressedTexSubImage1D, false) == true
            && getProcAddress("glGetCompressedTexImage", glGetCompressedTexImage, false) == true
        ){
            GL_VERSION_1_3_supported = true;
        }
    }

    GL_VERSION_1_4_supported = false;
    {
        if(getProcAddress("glBlendFuncSeparate", glBlendFuncSeparate, false) == true
            && getProcAddress("glMultiDrawArrays", glMultiDrawArrays, false) == true
            && getProcAddress("glMultiDrawElements", glMultiDrawElements, false) == true
            && getProcAddress("glPointParameterf", glPointParameterf, false) == true
            && getProcAddress("glPointParameterfv", glPointParameterfv, false) == true
            && getProcAddress("glPointParameteri", glPointParameteri, false) == true
            && getProcAddress("glPointParameteriv", glPointParameteriv, false) == true
        ){
            GL_VERSION_1_4_supported = true;
        }
    }

    GL_VERSION_1_5_supported = false;
    {
        if(getProcAddress("glGenQueries", glGenQueries, false) == true
            && getProcAddress("glDeleteQueries", glDeleteQueries, false) == true
            && getProcAddress("glIsQuery", glIsQuery, false) == true
            && getProcAddress("glBeginQuery", glBeginQuery, false) == true
            && getProcAddress("glEndQuery", glEndQuery, false) == true
            && getProcAddress("glGetQueryiv", glGetQueryiv, false) == true
            && getProcAddress("glGetQueryObjectiv", glGetQueryObjectiv, false) == true
            && getProcAddress("glGetQueryObjectuiv", glGetQueryObjectuiv, false) == true
            && getProcAddress("glBindBuffer", glBindBuffer, false) == true
            && getProcAddress("glDeleteBuffers", glDeleteBuffers, false) == true
            && getProcAddress("glGenBuffers", glGenBuffers, false) == true
            && getProcAddress("glIsBuffer", glIsBuffer, false) == true
            && getProcAddress("glBufferData", glBufferData, false) == true
            && getProcAddress("glBufferSubData", glBufferSubData, false) == true
            && getProcAddress("glGetBufferSubData", glGetBufferSubData, false) == true
            && getProcAddress("glMapBuffer", glMapBuffer, false) == true
            && getProcAddress("glUnmapBuffer", glUnmapBuffer, false) == true
            && getProcAddress("glGetBufferParameteriv", glGetBufferParameteriv, false) == true
            && getProcAddress("glGetBufferPointerv", glGetBufferPointerv, false) == true
        ){
            GL_VERSION_1_5_supported = true;
        }
    }

    GL_VERSION_2_0_supported = false;
    {
        if(getProcAddress("glBlendEquationSeparate", glBlendEquationSeparate, false) == true
            && getProcAddress("glDrawBuffers", glDrawBuffers, false) == true
            && getProcAddress("glStencilOpSeparate", glStencilOpSeparate, false) == true
            && getProcAddress("glStencilFuncSeparate", glStencilFuncSeparate, false) == true
            && getProcAddress("glStencilMaskSeparate", glStencilMaskSeparate, false) == true
            && getProcAddress("glAttachShader", glAttachShader, false) == true
            && getProcAddress("glBindAttribLocation", glBindAttribLocation, false) == true
            && getProcAddress("glCompileShader", glCompileShader, false) == true
            && getProcAddress("glCreateProgram", glCreateProgram, false) == true
            && getProcAddress("glCreateShader", glCreateShader, false) == true
            && getProcAddress("glDeleteProgram", glDeleteProgram, false) == true
            && getProcAddress("glDeleteShader", glDeleteShader, false) == true
            && getProcAddress("glDetachShader", glDetachShader, false) == true
            && getProcAddress("glDisableVertexAttribArray", glDisableVertexAttribArray, false) == true
            && getProcAddress("glEnableVertexAttribArray", glEnableVertexAttribArray, false) == true
            && getProcAddress("glGetActiveAttrib", glGetActiveAttrib, false) == true
            && getProcAddress("glGetActiveUniform", glGetActiveUniform, false) == true
            && getProcAddress("glGetAttachedShaders", glGetAttachedShaders, false) == true
            && getProcAddress("glGetAttribLocation", glGetAttribLocation, false) == true
            && getProcAddress("glGetProgramiv", glGetProgramiv, false) == true
            && getProcAddress("glGetProgramInfoLog", glGetProgramInfoLog, false) == true
            && getProcAddress("glGetShaderiv", glGetShaderiv, false) == true
            && getProcAddress("glGetShaderInfoLog", glGetShaderInfoLog, false) == true
            && getProcAddress("glGetShaderSource", glGetShaderSource, false) == true
            && getProcAddress("glGetUniformLocation", glGetUniformLocation, false) == true
            && getProcAddress("glGetUniformfv", glGetUniformfv, false) == true
            && getProcAddress("glGetUniformiv", glGetUniformiv, false) == true
            && getProcAddress("glGetVertexAttribdv", glGetVertexAttribdv, false) == true
            && getProcAddress("glGetVertexAttribfv", glGetVertexAttribfv, false) == true
            && getProcAddress("glGetVertexAttribiv", glGetVertexAttribiv, false) == true
            && getProcAddress("glGetVertexAttribPointerv", glGetVertexAttribPointerv, false) == true
            && getProcAddress("glIsProgram", glIsProgram, false) == true
            && getProcAddress("glIsShader", glIsShader, false) == true
            && getProcAddress("glLinkProgram", glLinkProgram, false) == true
            && getProcAddress("glShaderSource", glShaderSource, false) == true
            && getProcAddress("glUseProgram", glUseProgram, false) == true
            && getProcAddress("glUniform1f", glUniform1f, false) == true
            && getProcAddress("glUniform2f", glUniform2f, false) == true
            && getProcAddress("glUniform3f", glUniform3f, false) == true
            && getProcAddress("glUniform4f", glUniform4f, false) == true
            && getProcAddress("glUniform1i", glUniform1i, false) == true
            && getProcAddress("glUniform2i", glUniform2i, false) == true
            && getProcAddress("glUniform3i", glUniform3i, false) == true
            && getProcAddress("glUniform4i", glUniform4i, false) == true
            && getProcAddress("glUniform1fv", glUniform1fv, false) == true
            && getProcAddress("glUniform2fv", glUniform2fv, false) == true
            && getProcAddress("glUniform3fv", glUniform3fv, false) == true
            && getProcAddress("glUniform4fv", glUniform4fv, false) == true
            && getProcAddress("glUniform1iv", glUniform1iv, false) == true
            && getProcAddress("glUniform2iv", glUniform2iv, false) == true
            && getProcAddress("glUniform3iv", glUniform3iv, false) == true
            && getProcAddress("glUniform4iv", glUniform4iv, false) == true
            && getProcAddress("glUniformMatrix2fv", glUniformMatrix2fv, false) == true
            && getProcAddress("glUniformMatrix3fv", glUniformMatrix3fv, false) == true
            && getProcAddress("glUniformMatrix4fv", glUniformMatrix4fv, false) == true
            && getProcAddress("glValidateProgram", glValidateProgram, false) == true
            && getProcAddress("glVertexAttrib1d", glVertexAttrib1d, false) == true
            && getProcAddress("glVertexAttrib1dv", glVertexAttrib1dv, false) == true
            && getProcAddress("glVertexAttrib1f", glVertexAttrib1f, false) == true
            && getProcAddress("glVertexAttrib1fv", glVertexAttrib1fv, false) == true
            && getProcAddress("glVertexAttrib1s", glVertexAttrib1s, false) == true
            && getProcAddress("glVertexAttrib1sv", glVertexAttrib1sv, false) == true
            && getProcAddress("glVertexAttrib2d", glVertexAttrib2d, false) == true
            && getProcAddress("glVertexAttrib2dv", glVertexAttrib2dv, false) == true
            && getProcAddress("glVertexAttrib2f", glVertexAttrib2f, false) == true
            && getProcAddress("glVertexAttrib2fv", glVertexAttrib2fv, false) == true
            && getProcAddress("glVertexAttrib2s", glVertexAttrib2s, false) == true
            && getProcAddress("glVertexAttrib2sv", glVertexAttrib2sv, false) == true
            && getProcAddress("glVertexAttrib3d", glVertexAttrib3d, false) == true
            && getProcAddress("glVertexAttrib3dv", glVertexAttrib3dv, false) == true
            && getProcAddress("glVertexAttrib3f", glVertexAttrib3f, false) == true
            && getProcAddress("glVertexAttrib3fv", glVertexAttrib3fv, false) == true
            && getProcAddress("glVertexAttrib3s", glVertexAttrib3s, false) == true
            && getProcAddress("glVertexAttrib3sv", glVertexAttrib3sv, false) == true
            && getProcAddress("glVertexAttrib4Nbv", glVertexAttrib4Nbv, false) == true
            && getProcAddress("glVertexAttrib4Niv", glVertexAttrib4Niv, false) == true
            && getProcAddress("glVertexAttrib4Nsv", glVertexAttrib4Nsv, false) == true
            && getProcAddress("glVertexAttrib4Nub", glVertexAttrib4Nub, false) == true
            && getProcAddress("glVertexAttrib4Nubv", glVertexAttrib4Nubv, false) == true
            && getProcAddress("glVertexAttrib4Nuiv", glVertexAttrib4Nuiv, false) == true
            && getProcAddress("glVertexAttrib4Nusv", glVertexAttrib4Nusv, false) == true
            && getProcAddress("glVertexAttrib4bv", glVertexAttrib4bv, false) == true
            && getProcAddress("glVertexAttrib4d", glVertexAttrib4d, false) == true
            && getProcAddress("glVertexAttrib4dv", glVertexAttrib4dv, false) == true
            && getProcAddress("glVertexAttrib4f", glVertexAttrib4f, false) == true
            && getProcAddress("glVertexAttrib4fv", glVertexAttrib4fv, false) == true
            && getProcAddress("glVertexAttrib4iv", glVertexAttrib4iv, false) == true
            && getProcAddress("glVertexAttrib4s", glVertexAttrib4s, false) == true
            && getProcAddress("glVertexAttrib4sv", glVertexAttrib4sv, false) == true
            && getProcAddress("glVertexAttrib4ubv", glVertexAttrib4ubv, false) == true
            && getProcAddress("glVertexAttrib4uiv", glVertexAttrib4uiv, false) == true
            && getProcAddress("glVertexAttrib4usv", glVertexAttrib4usv, false) == true
            && getProcAddress("glVertexAttribPointer", glVertexAttribPointer, false) == true
        ){
            GL_VERSION_2_0_supported = true;
        }
    }

    GL_VERSION_2_1_supported = false;
    {
        if(getProcAddress("glUniformMatrix2x3fv", glUniformMatrix2x3fv, false) == true
            && getProcAddress("glUniformMatrix3x2fv", glUniformMatrix3x2fv, false) == true
            && getProcAddress("glUniformMatrix2x4fv", glUniformMatrix2x4fv, false) == true
            && getProcAddress("glUniformMatrix4x2fv", glUniformMatrix4x2fv, false) == true
            && getProcAddress("glUniformMatrix3x4fv", glUniformMatrix3x4fv, false) == true
            && getProcAddress("glUniformMatrix4x3fv", glUniformMatrix4x3fv, false) == true
        ){
            GL_VERSION_2_1_supported = true;
        }
    }

    GL_VERSION_3_0_supported = false;
    {
        if(getProcAddress("glColorMaski", glColorMaski, false) == true
            && getProcAddress("glGetBooleani_v", glGetBooleani_v, false) == true
            && getProcAddress("glGetIntegeri_v", glGetIntegeri_v, false) == true
            && getProcAddress("glEnablei", glEnablei, false) == true
            && getProcAddress("glDisablei", glDisablei, false) == true
            && getProcAddress("glIsEnabledi", glIsEnabledi, false) == true
            && getProcAddress("glBeginTransformFeedback", glBeginTransformFeedback, false) == true
            && getProcAddress("glEndTransformFeedback", glEndTransformFeedback, false) == true
            && getProcAddress("glBindBufferRange", glBindBufferRange, false) == true
            && getProcAddress("glBindBufferBase", glBindBufferBase, false) == true
            && getProcAddress("glTransformFeedbackVaryings", glTransformFeedbackVaryings, false) == true
            && getProcAddress("glGetTransformFeedbackVarying", glGetTransformFeedbackVarying, false) == true
            && getProcAddress("glClampColor", glClampColor, false) == true
            && getProcAddress("glBeginConditionalRender", glBeginConditionalRender, false) == true
            && getProcAddress("glEndConditionalRender", glEndConditionalRender, false) == true
            && getProcAddress("glVertexAttribIPointer", glVertexAttribIPointer, false) == true
            && getProcAddress("glGetVertexAttribIiv", glGetVertexAttribIiv, false) == true
            && getProcAddress("glGetVertexAttribIuiv", glGetVertexAttribIuiv, false) == true
            && getProcAddress("glVertexAttribI1i", glVertexAttribI1i, false) == true
            && getProcAddress("glVertexAttribI2i", glVertexAttribI2i, false) == true
            && getProcAddress("glVertexAttribI3i", glVertexAttribI3i, false) == true
            && getProcAddress("glVertexAttribI4i", glVertexAttribI4i, false) == true
            && getProcAddress("glVertexAttribI1ui", glVertexAttribI1ui, false) == true
            && getProcAddress("glVertexAttribI2ui", glVertexAttribI2ui, false) == true
            && getProcAddress("glVertexAttribI3ui", glVertexAttribI3ui, false) == true
            && getProcAddress("glVertexAttribI4ui", glVertexAttribI4ui, false) == true
            && getProcAddress("glVertexAttribI1iv", glVertexAttribI1iv, false) == true
            && getProcAddress("glVertexAttribI2iv", glVertexAttribI2iv, false) == true
            && getProcAddress("glVertexAttribI3iv", glVertexAttribI3iv, false) == true
            && getProcAddress("glVertexAttribI4iv", glVertexAttribI4iv, false) == true
            && getProcAddress("glVertexAttribI1uiv", glVertexAttribI1uiv, false) == true
            && getProcAddress("glVertexAttribI2uiv", glVertexAttribI2uiv, false) == true
            && getProcAddress("glVertexAttribI3uiv", glVertexAttribI3uiv, false) == true
            && getProcAddress("glVertexAttribI4uiv", glVertexAttribI4uiv, false) == true
            && getProcAddress("glVertexAttribI4bv", glVertexAttribI4bv, false) == true
            && getProcAddress("glVertexAttribI4sv", glVertexAttribI4sv, false) == true
            && getProcAddress("glVertexAttribI4ubv", glVertexAttribI4ubv, false) == true
            && getProcAddress("glVertexAttribI4usv", glVertexAttribI4usv, false) == true
            && getProcAddress("glGetUniformuiv", glGetUniformuiv, false) == true
            && getProcAddress("glBindFragDataLocation", glBindFragDataLocation, false) == true
            && getProcAddress("glGetFragDataLocation", glGetFragDataLocation, false) == true
            && getProcAddress("glUniform1ui", glUniform1ui, false) == true
            && getProcAddress("glUniform2ui", glUniform2ui, false) == true
            && getProcAddress("glUniform3ui", glUniform3ui, false) == true
            && getProcAddress("glUniform4ui", glUniform4ui, false) == true
            && getProcAddress("glUniform1uiv", glUniform1uiv, false) == true
            && getProcAddress("glUniform2uiv", glUniform2uiv, false) == true
            && getProcAddress("glUniform3uiv", glUniform3uiv, false) == true
            && getProcAddress("glUniform4uiv", glUniform4uiv, false) == true
            && getProcAddress("glTexParameterIiv", glTexParameterIiv, false) == true
            && getProcAddress("glTexParameterIuiv", glTexParameterIuiv, false) == true
            && getProcAddress("glGetTexParameterIiv", glGetTexParameterIiv, false) == true
            && getProcAddress("glGetTexParameterIuiv", glGetTexParameterIuiv, false) == true
            && getProcAddress("glClearBufferiv", glClearBufferiv, false) == true
            && getProcAddress("glClearBufferuiv", glClearBufferuiv, false) == true
            && getProcAddress("glClearBufferfv", glClearBufferfv, false) == true
            && getProcAddress("glClearBufferfi", glClearBufferfi, false) == true
            && getProcAddress("glGetStringi", glGetStringi, false) == true
        ){
            GL_VERSION_3_0_supported = true;
        }
    }

    GL_VERSION_3_1_supported = false;
    {
        if(getProcAddress("glDrawArraysInstanced", glDrawArraysInstanced, false) == true
            && getProcAddress("glDrawElementsInstanced", glDrawElementsInstanced, false) == true
            && getProcAddress("glTexBuffer", glTexBuffer, false) == true
            && getProcAddress("glPrimitiveRestartIndex", glPrimitiveRestartIndex, false) == true
        ){
            GL_VERSION_3_1_supported = true;
        }
    }

    GL_VERSION_3_2_supported = false;
    {
        if(getProcAddress("glGetInteger64i_v", glGetInteger64i_v, false) == true
            && getProcAddress("glGetBufferParameteri64v", glGetBufferParameteri64v, false) == true
            && getProcAddress("glFramebufferTexture", glFramebufferTexture, false) == true
        ){
            GL_VERSION_3_2_supported = true;
        }
    }

    GL_VERSION_3_3_supported = false;
    {
        if(getProcAddress("glVertexAttribDivisor", glVertexAttribDivisor, false) == true
        ){
            GL_VERSION_3_3_supported = true;
        }
    }

    GL_VERSION_4_0_supported = false;
    {
        if(getProcAddress("glMinSampleShading", glMinSampleShading, false) == true
            && getProcAddress("glBlendEquationi", glBlendEquationi, false) == true
            && getProcAddress("glBlendEquationSeparatei", glBlendEquationSeparatei, false) == true
            && getProcAddress("glBlendFunci", glBlendFunci, false) == true
            && getProcAddress("glBlendFuncSeparatei", glBlendFuncSeparatei, false) == true
        ){
            GL_VERSION_4_0_supported = true;
        }
    }
    GL_VERSION_4_1_supported = false;
    GL_VERSION_4_2_supported = false;
    GL_VERSION_4_3_supported = false;

    if(GL_ARB_multitexture_supported = isExtensionSupported("GL_ARB_multitexture", false)){
        if(getProcAddress("glActiveTextureARB", glActiveTextureARB, false) == false
            || getProcAddress("glClientActiveTextureARB", glClientActiveTextureARB, false) == false
            || getProcAddress("glMultiTexCoord1dARB", glMultiTexCoord1dARB, false) == false
            || getProcAddress("glMultiTexCoord1dvARB", glMultiTexCoord1dvARB, false) == false
            || getProcAddress("glMultiTexCoord1fARB", glMultiTexCoord1fARB, false) == false
            || getProcAddress("glMultiTexCoord1fvARB", glMultiTexCoord1fvARB, false) == false
            || getProcAddress("glMultiTexCoord1iARB", glMultiTexCoord1iARB, false) == false
            || getProcAddress("glMultiTexCoord1ivARB", glMultiTexCoord1ivARB, false) == false
            || getProcAddress("glMultiTexCoord1sARB", glMultiTexCoord1sARB, false) == false
            || getProcAddress("glMultiTexCoord1svARB", glMultiTexCoord1svARB, false) == false
            || getProcAddress("glMultiTexCoord2dARB", glMultiTexCoord2dARB, false) == false
            || getProcAddress("glMultiTexCoord2dvARB", glMultiTexCoord2dvARB, false) == false
            || getProcAddress("glMultiTexCoord2fARB", glMultiTexCoord2fARB, false) == false
            || getProcAddress("glMultiTexCoord2fvARB", glMultiTexCoord2fvARB, false) == false
            || getProcAddress("glMultiTexCoord2iARB", glMultiTexCoord2iARB, false) == false
            || getProcAddress("glMultiTexCoord2ivARB", glMultiTexCoord2ivARB, false) == false
            || getProcAddress("glMultiTexCoord2sARB", glMultiTexCoord2sARB, false) == false
            || getProcAddress("glMultiTexCoord2svARB", glMultiTexCoord2svARB, false) == false
            || getProcAddress("glMultiTexCoord3dARB", glMultiTexCoord3dARB, false) == false
            || getProcAddress("glMultiTexCoord3dvARB", glMultiTexCoord3dvARB, false) == false
            || getProcAddress("glMultiTexCoord3fARB", glMultiTexCoord3fARB, false) == false
            || getProcAddress("glMultiTexCoord3fvARB", glMultiTexCoord3fvARB, false) == false
            || getProcAddress("glMultiTexCoord3iARB", glMultiTexCoord3iARB, false) == false
            || getProcAddress("glMultiTexCoord3ivARB", glMultiTexCoord3ivARB, false) == false
            || getProcAddress("glMultiTexCoord3sARB", glMultiTexCoord3sARB, false) == false
            || getProcAddress("glMultiTexCoord3svARB", glMultiTexCoord3svARB, false) == false
            || getProcAddress("glMultiTexCoord4dARB", glMultiTexCoord4dARB, false) == false
            || getProcAddress("glMultiTexCoord4dvARB", glMultiTexCoord4dvARB, false) == false
            || getProcAddress("glMultiTexCoord4fARB", glMultiTexCoord4fARB, false) == false
            || getProcAddress("glMultiTexCoord4fvARB", glMultiTexCoord4fvARB, false) == false
            || getProcAddress("glMultiTexCoord4iARB", glMultiTexCoord4iARB, false) == false
            || getProcAddress("glMultiTexCoord4ivARB", glMultiTexCoord4ivARB, false) == false
            || getProcAddress("glMultiTexCoord4sARB", glMultiTexCoord4sARB, false) == false
            || getProcAddress("glMultiTexCoord4svARB", glMultiTexCoord4svARB, false) == false
        ){
            GL_ARB_multitexture_supported = false;
        }
    }

    if(GL_ARB_transpose_matrix_supported = isExtensionSupported("GL_ARB_transpose_matrix", false)){
        if(getProcAddress("glLoadTransposeMatrixfARB", glLoadTransposeMatrixfARB, false) == false
            || getProcAddress("glLoadTransposeMatrixdARB", glLoadTransposeMatrixdARB, false) == false
            || getProcAddress("glMultTransposeMatrixfARB", glMultTransposeMatrixfARB, false) == false
            || getProcAddress("glMultTransposeMatrixdARB", glMultTransposeMatrixdARB, false) == false
        ){
            GL_ARB_transpose_matrix_supported = false;
        }
    }

    if(GL_ARB_multisample_supported = isExtensionSupported("GL_ARB_multisample", false)){
        if(getProcAddress("glSampleCoverageARB", glSampleCoverageARB, false) == false
        ){
            GL_ARB_multisample_supported = false;
        }
    }
    GL_ARB_texture_env_add_supported = isExtensionSupported("GL_ARB_texture_env_add", false);
    GL_ARB_texture_cube_map_supported = isExtensionSupported("GL_ARB_texture_cube_map", false);

    if(GL_ARB_texture_compression_supported = isExtensionSupported("GL_ARB_texture_compression", false)){
        if(getProcAddress("glCompressedTexImage3DARB", glCompressedTexImage3DARB, false) == false
            || getProcAddress("glCompressedTexImage2DARB", glCompressedTexImage2DARB, false) == false
            || getProcAddress("glCompressedTexImage1DARB", glCompressedTexImage1DARB, false) == false
            || getProcAddress("glCompressedTexSubImage3DARB", glCompressedTexSubImage3DARB, false) == false
            || getProcAddress("glCompressedTexSubImage2DARB", glCompressedTexSubImage2DARB, false) == false
            || getProcAddress("glCompressedTexSubImage1DARB", glCompressedTexSubImage1DARB, false) == false
            || getProcAddress("glGetCompressedTexImageARB", glGetCompressedTexImageARB, false) == false
        ){
            GL_ARB_texture_compression_supported = false;
        }
    }
    GL_ARB_texture_border_clamp_supported = isExtensionSupported("GL_ARB_texture_border_clamp", false);

    if(GL_ARB_point_parameters_supported = isExtensionSupported("GL_ARB_point_parameters", false)){
        if(getProcAddress("glPointParameterfARB", glPointParameterfARB, false) == false
            || getProcAddress("glPointParameterfvARB", glPointParameterfvARB, false) == false
        ){
            GL_ARB_point_parameters_supported = false;
        }
    }

    if(GL_ARB_vertex_blend_supported = isExtensionSupported("GL_ARB_vertex_blend", false)){
        if(getProcAddress("glWeightbvARB", glWeightbvARB, false) == false
            || getProcAddress("glWeightsvARB", glWeightsvARB, false) == false
            || getProcAddress("glWeightivARB", glWeightivARB, false) == false
            || getProcAddress("glWeightfvARB", glWeightfvARB, false) == false
            || getProcAddress("glWeightdvARB", glWeightdvARB, false) == false
            || getProcAddress("glWeightubvARB", glWeightubvARB, false) == false
            || getProcAddress("glWeightusvARB", glWeightusvARB, false) == false
            || getProcAddress("glWeightuivARB", glWeightuivARB, false) == false
            || getProcAddress("glWeightPointerARB", glWeightPointerARB, false) == false
            || getProcAddress("glVertexBlendARB", glVertexBlendARB, false) == false
        ){
            GL_ARB_vertex_blend_supported = false;
        }
    }

    if(GL_ARB_matrix_palette_supported = isExtensionSupported("GL_ARB_matrix_palette", false)){
        if(getProcAddress("glCurrentPaletteMatrixARB", glCurrentPaletteMatrixARB, false) == false
            || getProcAddress("glMatrixIndexubvARB", glMatrixIndexubvARB, false) == false
            || getProcAddress("glMatrixIndexusvARB", glMatrixIndexusvARB, false) == false
            || getProcAddress("glMatrixIndexuivARB", glMatrixIndexuivARB, false) == false
            || getProcAddress("glMatrixIndexPointerARB", glMatrixIndexPointerARB, false) == false
        ){
            GL_ARB_matrix_palette_supported = false;
        }
    }
    GL_ARB_texture_env_combine_supported = isExtensionSupported("GL_ARB_texture_env_combine", false);
    GL_ARB_texture_env_crossbar_supported = isExtensionSupported("GL_ARB_texture_env_crossbar", false);
    GL_ARB_texture_env_dot3_supported = isExtensionSupported("GL_ARB_texture_env_dot3", false);
    GL_ARB_texture_mirrored_repeat_supported = isExtensionSupported("GL_ARB_texture_mirrored_repeat", false);
    GL_ARB_depth_texture_supported = isExtensionSupported("GL_ARB_depth_texture", false);
    GL_ARB_shadow_supported = isExtensionSupported("GL_ARB_shadow", false);
    GL_ARB_shadow_ambient_supported = isExtensionSupported("GL_ARB_shadow_ambient", false);

    if(GL_ARB_window_pos_supported = isExtensionSupported("GL_ARB_window_pos", false)){
        if(getProcAddress("glWindowPos2dARB", glWindowPos2dARB, false) == false
            || getProcAddress("glWindowPos2dvARB", glWindowPos2dvARB, false) == false
            || getProcAddress("glWindowPos2fARB", glWindowPos2fARB, false) == false
            || getProcAddress("glWindowPos2fvARB", glWindowPos2fvARB, false) == false
            || getProcAddress("glWindowPos2iARB", glWindowPos2iARB, false) == false
            || getProcAddress("glWindowPos2ivARB", glWindowPos2ivARB, false) == false
            || getProcAddress("glWindowPos2sARB", glWindowPos2sARB, false) == false
            || getProcAddress("glWindowPos2svARB", glWindowPos2svARB, false) == false
            || getProcAddress("glWindowPos3dARB", glWindowPos3dARB, false) == false
            || getProcAddress("glWindowPos3dvARB", glWindowPos3dvARB, false) == false
            || getProcAddress("glWindowPos3fARB", glWindowPos3fARB, false) == false
            || getProcAddress("glWindowPos3fvARB", glWindowPos3fvARB, false) == false
            || getProcAddress("glWindowPos3iARB", glWindowPos3iARB, false) == false
            || getProcAddress("glWindowPos3ivARB", glWindowPos3ivARB, false) == false
            || getProcAddress("glWindowPos3sARB", glWindowPos3sARB, false) == false
            || getProcAddress("glWindowPos3svARB", glWindowPos3svARB, false) == false
        ){
            GL_ARB_window_pos_supported = false;
        }
    }

    if(GL_ARB_vertex_program_supported = isExtensionSupported("GL_ARB_vertex_program", false)){
        if(getProcAddress("glVertexAttrib1dARB", glVertexAttrib1dARB, false) == false
            || getProcAddress("glVertexAttrib1dvARB", glVertexAttrib1dvARB, false) == false
            || getProcAddress("glVertexAttrib1fARB", glVertexAttrib1fARB, false) == false
            || getProcAddress("glVertexAttrib1fvARB", glVertexAttrib1fvARB, false) == false
            || getProcAddress("glVertexAttrib1sARB", glVertexAttrib1sARB, false) == false
            || getProcAddress("glVertexAttrib1svARB", glVertexAttrib1svARB, false) == false
            || getProcAddress("glVertexAttrib2dARB", glVertexAttrib2dARB, false) == false
            || getProcAddress("glVertexAttrib2dvARB", glVertexAttrib2dvARB, false) == false
            || getProcAddress("glVertexAttrib2fARB", glVertexAttrib2fARB, false) == false
            || getProcAddress("glVertexAttrib2fvARB", glVertexAttrib2fvARB, false) == false
            || getProcAddress("glVertexAttrib2sARB", glVertexAttrib2sARB, false) == false
            || getProcAddress("glVertexAttrib2svARB", glVertexAttrib2svARB, false) == false
            || getProcAddress("glVertexAttrib3dARB", glVertexAttrib3dARB, false) == false
            || getProcAddress("glVertexAttrib3dvARB", glVertexAttrib3dvARB, false) == false
            || getProcAddress("glVertexAttrib3fARB", glVertexAttrib3fARB, false) == false
            || getProcAddress("glVertexAttrib3fvARB", glVertexAttrib3fvARB, false) == false
            || getProcAddress("glVertexAttrib3sARB", glVertexAttrib3sARB, false) == false
            || getProcAddress("glVertexAttrib3svARB", glVertexAttrib3svARB, false) == false
            || getProcAddress("glVertexAttrib4NbvARB", glVertexAttrib4NbvARB, false) == false
            || getProcAddress("glVertexAttrib4NivARB", glVertexAttrib4NivARB, false) == false
            || getProcAddress("glVertexAttrib4NsvARB", glVertexAttrib4NsvARB, false) == false
            || getProcAddress("glVertexAttrib4NubARB", glVertexAttrib4NubARB, false) == false
            || getProcAddress("glVertexAttrib4NubvARB", glVertexAttrib4NubvARB, false) == false
            || getProcAddress("glVertexAttrib4NuivARB", glVertexAttrib4NuivARB, false) == false
            || getProcAddress("glVertexAttrib4NusvARB", glVertexAttrib4NusvARB, false) == false
            || getProcAddress("glVertexAttrib4bvARB", glVertexAttrib4bvARB, false) == false
            || getProcAddress("glVertexAttrib4dARB", glVertexAttrib4dARB, false) == false
            || getProcAddress("glVertexAttrib4dvARB", glVertexAttrib4dvARB, false) == false
            || getProcAddress("glVertexAttrib4fARB", glVertexAttrib4fARB, false) == false
            || getProcAddress("glVertexAttrib4fvARB", glVertexAttrib4fvARB, false) == false
            || getProcAddress("glVertexAttrib4ivARB", glVertexAttrib4ivARB, false) == false
            || getProcAddress("glVertexAttrib4sARB", glVertexAttrib4sARB, false) == false
            || getProcAddress("glVertexAttrib4svARB", glVertexAttrib4svARB, false) == false
            || getProcAddress("glVertexAttrib4ubvARB", glVertexAttrib4ubvARB, false) == false
            || getProcAddress("glVertexAttrib4uivARB", glVertexAttrib4uivARB, false) == false
            || getProcAddress("glVertexAttrib4usvARB", glVertexAttrib4usvARB, false) == false
            || getProcAddress("glVertexAttribPointerARB", glVertexAttribPointerARB, false) == false
            || getProcAddress("glEnableVertexAttribArrayARB", glEnableVertexAttribArrayARB, false) == false
            || getProcAddress("glDisableVertexAttribArrayARB", glDisableVertexAttribArrayARB, false) == false
            || getProcAddress("glProgramStringARB", glProgramStringARB, false) == false
            || getProcAddress("glBindProgramARB", glBindProgramARB, false) == false
            || getProcAddress("glDeleteProgramsARB", glDeleteProgramsARB, false) == false
            || getProcAddress("glGenProgramsARB", glGenProgramsARB, false) == false
            || getProcAddress("glProgramEnvParameter4dARB", glProgramEnvParameter4dARB, false) == false
            || getProcAddress("glProgramEnvParameter4dvARB", glProgramEnvParameter4dvARB, false) == false
            || getProcAddress("glProgramEnvParameter4fARB", glProgramEnvParameter4fARB, false) == false
            || getProcAddress("glProgramEnvParameter4fvARB", glProgramEnvParameter4fvARB, false) == false
            || getProcAddress("glProgramLocalParameter4dARB", glProgramLocalParameter4dARB, false) == false
            || getProcAddress("glProgramLocalParameter4dvARB", glProgramLocalParameter4dvARB, false) == false
            || getProcAddress("glProgramLocalParameter4fARB", glProgramLocalParameter4fARB, false) == false
            || getProcAddress("glProgramLocalParameter4fvARB", glProgramLocalParameter4fvARB, false) == false
            || getProcAddress("glGetProgramEnvParameterdvARB", glGetProgramEnvParameterdvARB, false) == false
            || getProcAddress("glGetProgramEnvParameterfvARB", glGetProgramEnvParameterfvARB, false) == false
            || getProcAddress("glGetProgramLocalParameterdvARB", glGetProgramLocalParameterdvARB, false) == false
            || getProcAddress("glGetProgramLocalParameterfvARB", glGetProgramLocalParameterfvARB, false) == false
            || getProcAddress("glGetProgramivARB", glGetProgramivARB, false) == false
            || getProcAddress("glGetProgramStringARB", glGetProgramStringARB, false) == false
            || getProcAddress("glGetVertexAttribdvARB", glGetVertexAttribdvARB, false) == false
            || getProcAddress("glGetVertexAttribfvARB", glGetVertexAttribfvARB, false) == false
            || getProcAddress("glGetVertexAttribivARB", glGetVertexAttribivARB, false) == false
            || getProcAddress("glGetVertexAttribPointervARB", glGetVertexAttribPointervARB, false) == false
            || getProcAddress("glIsProgramARB", glIsProgramARB, false) == false
        ){
            GL_ARB_vertex_program_supported = false;
        }
    }
    GL_ARB_fragment_program_supported = isExtensionSupported("GL_ARB_fragment_program", false);

    if(GL_ARB_vertex_buffer_object_supported = isExtensionSupported("GL_ARB_vertex_buffer_object", false)){
        if(getProcAddress("glBindBufferARB", glBindBufferARB, false) == false
            || getProcAddress("glDeleteBuffersARB", glDeleteBuffersARB, false) == false
            || getProcAddress("glGenBuffersARB", glGenBuffersARB, false) == false
            || getProcAddress("glIsBufferARB", glIsBufferARB, false) == false
            || getProcAddress("glBufferDataARB", glBufferDataARB, false) == false
            || getProcAddress("glBufferSubDataARB", glBufferSubDataARB, false) == false
            || getProcAddress("glGetBufferSubDataARB", glGetBufferSubDataARB, false) == false
            || getProcAddress("glMapBufferARB", glMapBufferARB, false) == false
            || getProcAddress("glUnmapBufferARB", glUnmapBufferARB, false) == false
            || getProcAddress("glGetBufferParameterivARB", glGetBufferParameterivARB, false) == false
            || getProcAddress("glGetBufferPointervARB", glGetBufferPointervARB, false) == false
        ){
            GL_ARB_vertex_buffer_object_supported = false;
        }
    }

    if(GL_ARB_occlusion_query_supported = isExtensionSupported("GL_ARB_occlusion_query", false)){
        if(getProcAddress("glGenQueriesARB", glGenQueriesARB, false) == false
            || getProcAddress("glDeleteQueriesARB", glDeleteQueriesARB, false) == false
            || getProcAddress("glIsQueryARB", glIsQueryARB, false) == false
            || getProcAddress("glBeginQueryARB", glBeginQueryARB, false) == false
            || getProcAddress("glEndQueryARB", glEndQueryARB, false) == false
            || getProcAddress("glGetQueryivARB", glGetQueryivARB, false) == false
            || getProcAddress("glGetQueryObjectivARB", glGetQueryObjectivARB, false) == false
            || getProcAddress("glGetQueryObjectuivARB", glGetQueryObjectuivARB, false) == false
        ){
            GL_ARB_occlusion_query_supported = false;
        }
    }

    if(GL_ARB_shader_objects_supported = isExtensionSupported("GL_ARB_shader_objects", false)){
        if(getProcAddress("glDeleteObjectARB", glDeleteObjectARB, false) == false
            || getProcAddress("glGetHandleARB", glGetHandleARB, false) == false
            || getProcAddress("glDetachObjectARB", glDetachObjectARB, false) == false
            || getProcAddress("glCreateShaderObjectARB", glCreateShaderObjectARB, false) == false
            || getProcAddress("glShaderSourceARB", glShaderSourceARB, false) == false
            || getProcAddress("glCompileShaderARB", glCompileShaderARB, false) == false
            || getProcAddress("glCreateProgramObjectARB", glCreateProgramObjectARB, false) == false
            || getProcAddress("glAttachObjectARB", glAttachObjectARB, false) == false
            || getProcAddress("glLinkProgramARB", glLinkProgramARB, false) == false
            || getProcAddress("glUseProgramObjectARB", glUseProgramObjectARB, false) == false
            || getProcAddress("glValidateProgramARB", glValidateProgramARB, false) == false
            || getProcAddress("glUniform1fARB", glUniform1fARB, false) == false
            || getProcAddress("glUniform2fARB", glUniform2fARB, false) == false
            || getProcAddress("glUniform3fARB", glUniform3fARB, false) == false
            || getProcAddress("glUniform4fARB", glUniform4fARB, false) == false
            || getProcAddress("glUniform1iARB", glUniform1iARB, false) == false
            || getProcAddress("glUniform2iARB", glUniform2iARB, false) == false
            || getProcAddress("glUniform3iARB", glUniform3iARB, false) == false
            || getProcAddress("glUniform4iARB", glUniform4iARB, false) == false
            || getProcAddress("glUniform1fvARB", glUniform1fvARB, false) == false
            || getProcAddress("glUniform2fvARB", glUniform2fvARB, false) == false
            || getProcAddress("glUniform3fvARB", glUniform3fvARB, false) == false
            || getProcAddress("glUniform4fvARB", glUniform4fvARB, false) == false
            || getProcAddress("glUniform1ivARB", glUniform1ivARB, false) == false
            || getProcAddress("glUniform2ivARB", glUniform2ivARB, false) == false
            || getProcAddress("glUniform3ivARB", glUniform3ivARB, false) == false
            || getProcAddress("glUniform4ivARB", glUniform4ivARB, false) == false
            || getProcAddress("glUniformMatrix2fvARB", glUniformMatrix2fvARB, false) == false
            || getProcAddress("glUniformMatrix3fvARB", glUniformMatrix3fvARB, false) == false
            || getProcAddress("glUniformMatrix4fvARB", glUniformMatrix4fvARB, false) == false
            || getProcAddress("glGetObjectParameterfvARB", glGetObjectParameterfvARB, false) == false
            || getProcAddress("glGetObjectParameterivARB", glGetObjectParameterivARB, false) == false
            || getProcAddress("glGetInfoLogARB", glGetInfoLogARB, false) == false
            || getProcAddress("glGetAttachedObjectsARB", glGetAttachedObjectsARB, false) == false
            || getProcAddress("glGetUniformLocationARB", glGetUniformLocationARB, false) == false
            || getProcAddress("glGetActiveUniformARB", glGetActiveUniformARB, false) == false
            || getProcAddress("glGetUniformfvARB", glGetUniformfvARB, false) == false
            || getProcAddress("glGetUniformivARB", glGetUniformivARB, false) == false
            || getProcAddress("glGetShaderSourceARB", glGetShaderSourceARB, false) == false
        ){
            GL_ARB_shader_objects_supported = false;
        }
    }

    if(GL_ARB_vertex_shader_supported = isExtensionSupported("GL_ARB_vertex_shader", false)){
        if(getProcAddress("glBindAttribLocationARB", glBindAttribLocationARB, false) == false
            || getProcAddress("glGetActiveAttribARB", glGetActiveAttribARB, false) == false
            || getProcAddress("glGetAttribLocationARB", glGetAttribLocationARB, false) == false
        ){
            GL_ARB_vertex_shader_supported = false;
        }
    }
    GL_ARB_fragment_shader_supported = isExtensionSupported("GL_ARB_fragment_shader", false);
    GL_ARB_shading_language_100_supported = isExtensionSupported("GL_ARB_shading_language_100", false);
    GL_ARB_texture_non_power_of_two_supported = isExtensionSupported("GL_ARB_texture_non_power_of_two", false);
    GL_ARB_point_sprite_supported = isExtensionSupported("GL_ARB_point_sprite", false);
    GL_ARB_fragment_program_shadow_supported = isExtensionSupported("GL_ARB_fragment_program_shadow", false);

    if(GL_ARB_draw_buffers_supported = isExtensionSupported("GL_ARB_draw_buffers", false)){
        if(getProcAddress("glDrawBuffersARB", glDrawBuffersARB, false) == false
        ){
            GL_ARB_draw_buffers_supported = false;
        }
    }
    GL_ARB_texture_rectangle_supported = isExtensionSupported("GL_ARB_texture_rectangle", false);

    if(GL_ARB_color_buffer_float_supported = isExtensionSupported("GL_ARB_color_buffer_float", false)){
        if(getProcAddress("glClampColorARB", glClampColorARB, false) == false
        ){
            GL_ARB_color_buffer_float_supported = false;
        }
    }
    GL_ARB_half_float_pixel_supported = isExtensionSupported("GL_ARB_half_float_pixel", false);
    GL_ARB_texture_float_supported = isExtensionSupported("GL_ARB_texture_float", false);
    GL_ARB_pixel_buffer_object_supported = isExtensionSupported("GL_ARB_pixel_buffer_object", false);
    GL_ARB_depth_buffer_float_supported = isExtensionSupported("GL_ARB_depth_buffer_float", false);

    if(GL_ARB_draw_instanced_supported = isExtensionSupported("GL_ARB_draw_instanced", false)){
        if(getProcAddress("glDrawArraysInstancedARB", glDrawArraysInstancedARB, false) == false
            || getProcAddress("glDrawElementsInstancedARB", glDrawElementsInstancedARB, false) == false
        ){
            GL_ARB_draw_instanced_supported = false;
        }
    }

    if(GL_ARB_framebuffer_object_supported = isExtensionSupported("GL_ARB_framebuffer_object", false)){
        if(getProcAddress("glIsRenderbuffer", glIsRenderbuffer, false) == false
            || getProcAddress("glBindRenderbuffer", glBindRenderbuffer, false) == false
            || getProcAddress("glDeleteRenderbuffers", glDeleteRenderbuffers, false) == false
            || getProcAddress("glGenRenderbuffers", glGenRenderbuffers, false) == false
            || getProcAddress("glRenderbufferStorage", glRenderbufferStorage, false) == false
            || getProcAddress("glGetRenderbufferParameteriv", glGetRenderbufferParameteriv, false) == false
            || getProcAddress("glIsFramebuffer", glIsFramebuffer, false) == false
            || getProcAddress("glBindFramebuffer", glBindFramebuffer, false) == false
            || getProcAddress("glDeleteFramebuffers", glDeleteFramebuffers, false) == false
            || getProcAddress("glGenFramebuffers", glGenFramebuffers, false) == false
            || getProcAddress("glCheckFramebufferStatus", glCheckFramebufferStatus, false) == false
            || getProcAddress("glFramebufferTexture1D", glFramebufferTexture1D, false) == false
            || getProcAddress("glFramebufferTexture2D", glFramebufferTexture2D, false) == false
            || getProcAddress("glFramebufferTexture3D", glFramebufferTexture3D, false) == false
            || getProcAddress("glFramebufferRenderbuffer", glFramebufferRenderbuffer, false) == false
            || getProcAddress("glGetFramebufferAttachmentParameteriv", glGetFramebufferAttachmentParameteriv, false) == false
            || getProcAddress("glGenerateMipmap", glGenerateMipmap, false) == false
            || getProcAddress("glBlitFramebuffer", glBlitFramebuffer, false) == false
            || getProcAddress("glRenderbufferStorageMultisample", glRenderbufferStorageMultisample, false) == false
            || getProcAddress("glFramebufferTextureLayer", glFramebufferTextureLayer, false) == false
        ){
            GL_ARB_framebuffer_object_supported = false;
        }
    }
    GL_ARB_framebuffer_sRGB_supported = isExtensionSupported("GL_ARB_framebuffer_sRGB", false);

    if(GL_ARB_geometry_shader4_supported = isExtensionSupported("GL_ARB_geometry_shader4", false)){
        if(getProcAddress("glProgramParameteriARB", glProgramParameteriARB, false) == false
            || getProcAddress("glFramebufferTextureARB", glFramebufferTextureARB, false) == false
            || getProcAddress("glFramebufferTextureLayerARB", glFramebufferTextureLayerARB, false) == false
            || getProcAddress("glFramebufferTextureFaceARB", glFramebufferTextureFaceARB, false) == false
        ){
            GL_ARB_geometry_shader4_supported = false;
        }
    }
    GL_ARB_half_float_vertex_supported = isExtensionSupported("GL_ARB_half_float_vertex", false);

    if(GL_ARB_instanced_arrays_supported = isExtensionSupported("GL_ARB_instanced_arrays", false)){
        if(getProcAddress("glVertexAttribDivisorARB", glVertexAttribDivisorARB, false) == false
        ){
            GL_ARB_instanced_arrays_supported = false;
        }
    }

    if(GL_ARB_map_buffer_range_supported = isExtensionSupported("GL_ARB_map_buffer_range", false)){
        if(getProcAddress("glMapBufferRange", glMapBufferRange, false) == false
            || getProcAddress("glFlushMappedBufferRange", glFlushMappedBufferRange, false) == false
        ){
            GL_ARB_map_buffer_range_supported = false;
        }
    }

    if(GL_ARB_texture_buffer_object_supported = isExtensionSupported("GL_ARB_texture_buffer_object", false)){
        if(getProcAddress("glTexBufferARB", glTexBufferARB, false) == false
        ){
            GL_ARB_texture_buffer_object_supported = false;
        }
    }
    GL_ARB_texture_compression_rgtc_supported = isExtensionSupported("GL_ARB_texture_compression_rgtc", false);
    GL_ARB_texture_rg_supported = isExtensionSupported("GL_ARB_texture_rg", false);

    if(GL_ARB_vertex_array_object_supported = isExtensionSupported("GL_ARB_vertex_array_object", false)){
        if(getProcAddress("glBindVertexArray", glBindVertexArray, false) == false
            || getProcAddress("glDeleteVertexArrays", glDeleteVertexArrays, false) == false
            || getProcAddress("glGenVertexArrays", glGenVertexArrays, false) == false
            || getProcAddress("glIsVertexArray", glIsVertexArray, false) == false
        ){
            GL_ARB_vertex_array_object_supported = false;
        }
    }

    if(GL_ARB_uniform_buffer_object_supported = isExtensionSupported("GL_ARB_uniform_buffer_object", false)){
        if(getProcAddress("glGetUniformIndices", glGetUniformIndices, false) == false
            || getProcAddress("glGetActiveUniformsiv", glGetActiveUniformsiv, false) == false
            || getProcAddress("glGetActiveUniformName", glGetActiveUniformName, false) == false
            || getProcAddress("glGetUniformBlockIndex", glGetUniformBlockIndex, false) == false
            || getProcAddress("glGetActiveUniformBlockiv", glGetActiveUniformBlockiv, false) == false
            || getProcAddress("glGetActiveUniformBlockName", glGetActiveUniformBlockName, false) == false
            || getProcAddress("glUniformBlockBinding", glUniformBlockBinding, false) == false
        ){
            GL_ARB_uniform_buffer_object_supported = false;
        }
    }
    GL_ARB_compatibility_supported = isExtensionSupported("GL_ARB_compatibility", false);

    if(GL_ARB_copy_buffer_supported = isExtensionSupported("GL_ARB_copy_buffer", false)){
        if(getProcAddress("glCopyBufferSubData", glCopyBufferSubData, false) == false
        ){
            GL_ARB_copy_buffer_supported = false;
        }
    }
    GL_ARB_shader_texture_lod_supported = isExtensionSupported("GL_ARB_shader_texture_lod", false);
    GL_ARB_depth_clamp_supported = isExtensionSupported("GL_ARB_depth_clamp", false);

    if(GL_ARB_draw_elements_base_vertex_supported = isExtensionSupported("GL_ARB_draw_elements_base_vertex", false)){
        if(getProcAddress("glDrawElementsBaseVertex", glDrawElementsBaseVertex, false) == false
            || getProcAddress("glDrawRangeElementsBaseVertex", glDrawRangeElementsBaseVertex, false) == false
            || getProcAddress("glDrawElementsInstancedBaseVertex", glDrawElementsInstancedBaseVertex, false) == false
            || getProcAddress("glMultiDrawElementsBaseVertex", glMultiDrawElementsBaseVertex, false) == false
        ){
            GL_ARB_draw_elements_base_vertex_supported = false;
        }
    }
    GL_ARB_fragment_coord_conventions_supported = isExtensionSupported("GL_ARB_fragment_coord_conventions", false);

    if(GL_ARB_provoking_vertex_supported = isExtensionSupported("GL_ARB_provoking_vertex", false)){
        if(getProcAddress("glProvokingVertex", glProvokingVertex, false) == false
        ){
            GL_ARB_provoking_vertex_supported = false;
        }
    }
    GL_ARB_seamless_cube_map_supported = isExtensionSupported("GL_ARB_seamless_cube_map", false);

    if(GL_ARB_sync_supported = isExtensionSupported("GL_ARB_sync", false)){
        if(getProcAddress("glFenceSync", glFenceSync, false) == false
            || getProcAddress("glIsSync", glIsSync, false) == false
            || getProcAddress("glDeleteSync", glDeleteSync, false) == false
            || getProcAddress("glClientWaitSync", glClientWaitSync, false) == false
            || getProcAddress("glWaitSync", glWaitSync, false) == false
            || getProcAddress("glGetInteger64v", glGetInteger64v, false) == false
            || getProcAddress("glGetSynciv", glGetSynciv, false) == false
        ){
            GL_ARB_sync_supported = false;
        }
    }

    if(GL_ARB_texture_multisample_supported = isExtensionSupported("GL_ARB_texture_multisample", false)){
        if(getProcAddress("glTexImage2DMultisample", glTexImage2DMultisample, false) == false
            || getProcAddress("glTexImage3DMultisample", glTexImage3DMultisample, false) == false
            || getProcAddress("glGetMultisamplefv", glGetMultisamplefv, false) == false
            || getProcAddress("glSampleMaski", glSampleMaski, false) == false
        ){
            GL_ARB_texture_multisample_supported = false;
        }
    }
    GL_ARB_vertex_array_bgra_supported = isExtensionSupported("GL_ARB_vertex_array_bgra", false);

    if(GL_ARB_draw_buffers_blend_supported = isExtensionSupported("GL_ARB_draw_buffers_blend", false)){
        if(getProcAddress("glBlendEquationiARB", glBlendEquationiARB, false) == false
            || getProcAddress("glBlendEquationSeparateiARB", glBlendEquationSeparateiARB, false) == false
            || getProcAddress("glBlendFunciARB", glBlendFunciARB, false) == false
            || getProcAddress("glBlendFuncSeparateiARB", glBlendFuncSeparateiARB, false) == false
        ){
            GL_ARB_draw_buffers_blend_supported = false;
        }
    }

    if(GL_ARB_sample_shading_supported = isExtensionSupported("GL_ARB_sample_shading", false)){
        if(getProcAddress("glMinSampleShadingARB", glMinSampleShadingARB, false) == false
        ){
            GL_ARB_sample_shading_supported = false;
        }
    }
    GL_ARB_texture_cube_map_array_supported = isExtensionSupported("GL_ARB_texture_cube_map_array", false);
    GL_ARB_texture_gather_supported = isExtensionSupported("GL_ARB_texture_gather", false);
    GL_ARB_texture_query_lod_supported = isExtensionSupported("GL_ARB_texture_query_lod", false);

    if(GL_ARB_shading_language_include_supported = isExtensionSupported("GL_ARB_shading_language_include", false)){
        if(getProcAddress("glNamedStringARB", glNamedStringARB, false) == false
            || getProcAddress("glDeleteNamedStringARB", glDeleteNamedStringARB, false) == false
            || getProcAddress("glCompileShaderIncludeARB", glCompileShaderIncludeARB, false) == false
            || getProcAddress("glIsNamedStringARB", glIsNamedStringARB, false) == false
            || getProcAddress("glGetNamedStringARB", glGetNamedStringARB, false) == false
            || getProcAddress("glGetNamedStringivARB", glGetNamedStringivARB, false) == false
        ){
            GL_ARB_shading_language_include_supported = false;
        }
    }
    GL_ARB_texture_compression_bptc_supported = isExtensionSupported("GL_ARB_texture_compression_bptc", false);

    if(GL_ARB_blend_func_extended_supported = isExtensionSupported("GL_ARB_blend_func_extended", false)){
        if(getProcAddress("glBindFragDataLocationIndexed", glBindFragDataLocationIndexed, false) == false
            || getProcAddress("glGetFragDataIndex", glGetFragDataIndex, false) == false
        ){
            GL_ARB_blend_func_extended_supported = false;
        }
    }
    GL_ARB_explicit_attrib_location_supported = isExtensionSupported("GL_ARB_explicit_attrib_location", false);
    GL_ARB_occlusion_query2_supported = isExtensionSupported("GL_ARB_occlusion_query2", false);

    if(GL_ARB_sampler_objects_supported = isExtensionSupported("GL_ARB_sampler_objects", false)){
        if(getProcAddress("glGenSamplers", glGenSamplers, false) == false
            || getProcAddress("glDeleteSamplers", glDeleteSamplers, false) == false
            || getProcAddress("glIsSampler", glIsSampler, false) == false
            || getProcAddress("glBindSampler", glBindSampler, false) == false
            || getProcAddress("glSamplerParameteri", glSamplerParameteri, false) == false
            || getProcAddress("glSamplerParameteriv", glSamplerParameteriv, false) == false
            || getProcAddress("glSamplerParameterf", glSamplerParameterf, false) == false
            || getProcAddress("glSamplerParameterfv", glSamplerParameterfv, false) == false
            || getProcAddress("glSamplerParameterIiv", glSamplerParameterIiv, false) == false
            || getProcAddress("glSamplerParameterIuiv", glSamplerParameterIuiv, false) == false
            || getProcAddress("glGetSamplerParameteriv", glGetSamplerParameteriv, false) == false
            || getProcAddress("glGetSamplerParameterIiv", glGetSamplerParameterIiv, false) == false
            || getProcAddress("glGetSamplerParameterfv", glGetSamplerParameterfv, false) == false
            || getProcAddress("glGetSamplerParameterIuiv", glGetSamplerParameterIuiv, false) == false
        ){
            GL_ARB_sampler_objects_supported = false;
        }
    }
    GL_ARB_shader_bit_encoding_supported = isExtensionSupported("GL_ARB_shader_bit_encoding", false);
    GL_ARB_texture_rgb10_a2ui_supported = isExtensionSupported("GL_ARB_texture_rgb10_a2ui", false);
    GL_ARB_texture_swizzle_supported = isExtensionSupported("GL_ARB_texture_swizzle", false);

    if(GL_ARB_timer_query_supported = isExtensionSupported("GL_ARB_timer_query", false)){
        if(getProcAddress("glQueryCounter", glQueryCounter, false) == false
            || getProcAddress("glGetQueryObjecti64v", glGetQueryObjecti64v, false) == false
            || getProcAddress("glGetQueryObjectui64v", glGetQueryObjectui64v, false) == false
        ){
            GL_ARB_timer_query_supported = false;
        }
    }

    if(GL_ARB_vertex_type_2_10_10_10_rev_supported = isExtensionSupported("GL_ARB_vertex_type_2_10_10_10_rev", false)){
        if(getProcAddress("glVertexP2ui", glVertexP2ui, false) == false
            || getProcAddress("glVertexP2uiv", glVertexP2uiv, false) == false
            || getProcAddress("glVertexP3ui", glVertexP3ui, false) == false
            || getProcAddress("glVertexP3uiv", glVertexP3uiv, false) == false
            || getProcAddress("glVertexP4ui", glVertexP4ui, false) == false
            || getProcAddress("glVertexP4uiv", glVertexP4uiv, false) == false
            || getProcAddress("glTexCoordP1ui", glTexCoordP1ui, false) == false
            || getProcAddress("glTexCoordP1uiv", glTexCoordP1uiv, false) == false
            || getProcAddress("glTexCoordP2ui", glTexCoordP2ui, false) == false
            || getProcAddress("glTexCoordP2uiv", glTexCoordP2uiv, false) == false
            || getProcAddress("glTexCoordP3ui", glTexCoordP3ui, false) == false
            || getProcAddress("glTexCoordP3uiv", glTexCoordP3uiv, false) == false
            || getProcAddress("glTexCoordP4ui", glTexCoordP4ui, false) == false
            || getProcAddress("glTexCoordP4uiv", glTexCoordP4uiv, false) == false
            || getProcAddress("glMultiTexCoordP1ui", glMultiTexCoordP1ui, false) == false
            || getProcAddress("glMultiTexCoordP1uiv", glMultiTexCoordP1uiv, false) == false
            || getProcAddress("glMultiTexCoordP2ui", glMultiTexCoordP2ui, false) == false
            || getProcAddress("glMultiTexCoordP2uiv", glMultiTexCoordP2uiv, false) == false
            || getProcAddress("glMultiTexCoordP3ui", glMultiTexCoordP3ui, false) == false
            || getProcAddress("glMultiTexCoordP3uiv", glMultiTexCoordP3uiv, false) == false
            || getProcAddress("glMultiTexCoordP4ui", glMultiTexCoordP4ui, false) == false
            || getProcAddress("glMultiTexCoordP4uiv", glMultiTexCoordP4uiv, false) == false
            || getProcAddress("glNormalP3ui", glNormalP3ui, false) == false
            || getProcAddress("glNormalP3uiv", glNormalP3uiv, false) == false
            || getProcAddress("glColorP3ui", glColorP3ui, false) == false
            || getProcAddress("glColorP3uiv", glColorP3uiv, false) == false
            || getProcAddress("glColorP4ui", glColorP4ui, false) == false
            || getProcAddress("glColorP4uiv", glColorP4uiv, false) == false
            || getProcAddress("glSecondaryColorP3ui", glSecondaryColorP3ui, false) == false
            || getProcAddress("glSecondaryColorP3uiv", glSecondaryColorP3uiv, false) == false
            || getProcAddress("glVertexAttribP1ui", glVertexAttribP1ui, false) == false
            || getProcAddress("glVertexAttribP1uiv", glVertexAttribP1uiv, false) == false
            || getProcAddress("glVertexAttribP2ui", glVertexAttribP2ui, false) == false
            || getProcAddress("glVertexAttribP2uiv", glVertexAttribP2uiv, false) == false
            || getProcAddress("glVertexAttribP3ui", glVertexAttribP3ui, false) == false
            || getProcAddress("glVertexAttribP3uiv", glVertexAttribP3uiv, false) == false
            || getProcAddress("glVertexAttribP4ui", glVertexAttribP4ui, false) == false
            || getProcAddress("glVertexAttribP4uiv", glVertexAttribP4uiv, false) == false
        ){
            GL_ARB_vertex_type_2_10_10_10_rev_supported = false;
        }
    }

    if(GL_ARB_draw_indirect_supported = isExtensionSupported("GL_ARB_draw_indirect", false)){
        if(getProcAddress("glDrawArraysIndirect", glDrawArraysIndirect, false) == false
            || getProcAddress("glDrawElementsIndirect", glDrawElementsIndirect, false) == false
        ){
            GL_ARB_draw_indirect_supported = false;
        }
    }
    GL_ARB_gpu_shader5_supported = isExtensionSupported("GL_ARB_gpu_shader5", false);

    if(GL_ARB_gpu_shader_fp64_supported = isExtensionSupported("GL_ARB_gpu_shader_fp64", false)){
        if(getProcAddress("glUniform1d", glUniform1d, false) == false
            || getProcAddress("glUniform2d", glUniform2d, false) == false
            || getProcAddress("glUniform3d", glUniform3d, false) == false
            || getProcAddress("glUniform4d", glUniform4d, false) == false
            || getProcAddress("glUniform1dv", glUniform1dv, false) == false
            || getProcAddress("glUniform2dv", glUniform2dv, false) == false
            || getProcAddress("glUniform3dv", glUniform3dv, false) == false
            || getProcAddress("glUniform4dv", glUniform4dv, false) == false
            || getProcAddress("glUniformMatrix2dv", glUniformMatrix2dv, false) == false
            || getProcAddress("glUniformMatrix3dv", glUniformMatrix3dv, false) == false
            || getProcAddress("glUniformMatrix4dv", glUniformMatrix4dv, false) == false
            || getProcAddress("glUniformMatrix2x3dv", glUniformMatrix2x3dv, false) == false
            || getProcAddress("glUniformMatrix2x4dv", glUniformMatrix2x4dv, false) == false
            || getProcAddress("glUniformMatrix3x2dv", glUniformMatrix3x2dv, false) == false
            || getProcAddress("glUniformMatrix3x4dv", glUniformMatrix3x4dv, false) == false
            || getProcAddress("glUniformMatrix4x2dv", glUniformMatrix4x2dv, false) == false
            || getProcAddress("glUniformMatrix4x3dv", glUniformMatrix4x3dv, false) == false
            || getProcAddress("glGetUniformdv", glGetUniformdv, false) == false
        ){
            GL_ARB_gpu_shader_fp64_supported = false;
        }
    }

    if(GL_ARB_shader_subroutine_supported = isExtensionSupported("GL_ARB_shader_subroutine", false)){
        if(getProcAddress("glGetSubroutineUniformLocation", glGetSubroutineUniformLocation, false) == false
            || getProcAddress("glGetSubroutineIndex", glGetSubroutineIndex, false) == false
            || getProcAddress("glGetActiveSubroutineUniformiv", glGetActiveSubroutineUniformiv, false) == false
            || getProcAddress("glGetActiveSubroutineUniformName", glGetActiveSubroutineUniformName, false) == false
            || getProcAddress("glGetActiveSubroutineName", glGetActiveSubroutineName, false) == false
            || getProcAddress("glUniformSubroutinesuiv", glUniformSubroutinesuiv, false) == false
            || getProcAddress("glGetUniformSubroutineuiv", glGetUniformSubroutineuiv, false) == false
            || getProcAddress("glGetProgramStageiv", glGetProgramStageiv, false) == false
        ){
            GL_ARB_shader_subroutine_supported = false;
        }
    }

    if(GL_ARB_tessellation_shader_supported = isExtensionSupported("GL_ARB_tessellation_shader", false)){
        if(getProcAddress("glPatchParameteri", glPatchParameteri, false) == false
            || getProcAddress("glPatchParameterfv", glPatchParameterfv, false) == false
        ){
            GL_ARB_tessellation_shader_supported = false;
        }
    }
    GL_ARB_texture_buffer_object_rgb32_supported = isExtensionSupported("GL_ARB_texture_buffer_object_rgb32", false);

    if(GL_ARB_transform_feedback2_supported = isExtensionSupported("GL_ARB_transform_feedback2", false)){
        if(getProcAddress("glBindTransformFeedback", glBindTransformFeedback, false) == false
            || getProcAddress("glDeleteTransformFeedbacks", glDeleteTransformFeedbacks, false) == false
            || getProcAddress("glGenTransformFeedbacks", glGenTransformFeedbacks, false) == false
            || getProcAddress("glIsTransformFeedback", glIsTransformFeedback, false) == false
            || getProcAddress("glPauseTransformFeedback", glPauseTransformFeedback, false) == false
            || getProcAddress("glResumeTransformFeedback", glResumeTransformFeedback, false) == false
            || getProcAddress("glDrawTransformFeedback", glDrawTransformFeedback, false) == false
        ){
            GL_ARB_transform_feedback2_supported = false;
        }
    }

    if(GL_ARB_transform_feedback3_supported = isExtensionSupported("GL_ARB_transform_feedback3", false)){
        if(getProcAddress("glDrawTransformFeedbackStream", glDrawTransformFeedbackStream, false) == false
            || getProcAddress("glBeginQueryIndexed", glBeginQueryIndexed, false) == false
            || getProcAddress("glEndQueryIndexed", glEndQueryIndexed, false) == false
            || getProcAddress("glGetQueryIndexediv", glGetQueryIndexediv, false) == false
        ){
            GL_ARB_transform_feedback3_supported = false;
        }
    }

    if(GL_ARB_ES2_compatibility_supported = isExtensionSupported("GL_ARB_ES2_compatibility", false)){
        if(getProcAddress("glReleaseShaderCompiler", glReleaseShaderCompiler, false) == false
            || getProcAddress("glShaderBinary", glShaderBinary, false) == false
            || getProcAddress("glGetShaderPrecisionFormat", glGetShaderPrecisionFormat, false) == false
            || getProcAddress("glDepthRangef", glDepthRangef, false) == false
            || getProcAddress("glClearDepthf", glClearDepthf, false) == false
        ){
            GL_ARB_ES2_compatibility_supported = false;
        }
    }

    if(GL_ARB_get_program_binary_supported = isExtensionSupported("GL_ARB_get_program_binary", false)){
        if(getProcAddress("glGetProgramBinary", glGetProgramBinary, false) == false
            || getProcAddress("glProgramBinary", glProgramBinary, false) == false
            || getProcAddress("glProgramParameteri", glProgramParameteri, false) == false
        ){
            GL_ARB_get_program_binary_supported = false;
        }
    }

    if(GL_ARB_separate_shader_objects_supported = isExtensionSupported("GL_ARB_separate_shader_objects", false)){
        if(getProcAddress("glUseProgramStages", glUseProgramStages, false) == false
            || getProcAddress("glActiveShaderProgram", glActiveShaderProgram, false) == false
            || getProcAddress("glCreateShaderProgramv", glCreateShaderProgramv, false) == false
            || getProcAddress("glBindProgramPipeline", glBindProgramPipeline, false) == false
            || getProcAddress("glDeleteProgramPipelines", glDeleteProgramPipelines, false) == false
            || getProcAddress("glGenProgramPipelines", glGenProgramPipelines, false) == false
            || getProcAddress("glIsProgramPipeline", glIsProgramPipeline, false) == false
            || getProcAddress("glGetProgramPipelineiv", glGetProgramPipelineiv, false) == false
            || getProcAddress("glProgramUniform1i", glProgramUniform1i, false) == false
            || getProcAddress("glProgramUniform1iv", glProgramUniform1iv, false) == false
            || getProcAddress("glProgramUniform1f", glProgramUniform1f, false) == false
            || getProcAddress("glProgramUniform1fv", glProgramUniform1fv, false) == false
            || getProcAddress("glProgramUniform1d", glProgramUniform1d, false) == false
            || getProcAddress("glProgramUniform1dv", glProgramUniform1dv, false) == false
            || getProcAddress("glProgramUniform1ui", glProgramUniform1ui, false) == false
            || getProcAddress("glProgramUniform1uiv", glProgramUniform1uiv, false) == false
            || getProcAddress("glProgramUniform2i", glProgramUniform2i, false) == false
            || getProcAddress("glProgramUniform2iv", glProgramUniform2iv, false) == false
            || getProcAddress("glProgramUniform2f", glProgramUniform2f, false) == false
            || getProcAddress("glProgramUniform2fv", glProgramUniform2fv, false) == false
            || getProcAddress("glProgramUniform2d", glProgramUniform2d, false) == false
            || getProcAddress("glProgramUniform2dv", glProgramUniform2dv, false) == false
            || getProcAddress("glProgramUniform2ui", glProgramUniform2ui, false) == false
            || getProcAddress("glProgramUniform2uiv", glProgramUniform2uiv, false) == false
            || getProcAddress("glProgramUniform3i", glProgramUniform3i, false) == false
            || getProcAddress("glProgramUniform3iv", glProgramUniform3iv, false) == false
            || getProcAddress("glProgramUniform3f", glProgramUniform3f, false) == false
            || getProcAddress("glProgramUniform3fv", glProgramUniform3fv, false) == false
            || getProcAddress("glProgramUniform3d", glProgramUniform3d, false) == false
            || getProcAddress("glProgramUniform3dv", glProgramUniform3dv, false) == false
            || getProcAddress("glProgramUniform3ui", glProgramUniform3ui, false) == false
            || getProcAddress("glProgramUniform3uiv", glProgramUniform3uiv, false) == false
            || getProcAddress("glProgramUniform4i", glProgramUniform4i, false) == false
            || getProcAddress("glProgramUniform4iv", glProgramUniform4iv, false) == false
            || getProcAddress("glProgramUniform4f", glProgramUniform4f, false) == false
            || getProcAddress("glProgramUniform4fv", glProgramUniform4fv, false) == false
            || getProcAddress("glProgramUniform4d", glProgramUniform4d, false) == false
            || getProcAddress("glProgramUniform4dv", glProgramUniform4dv, false) == false
            || getProcAddress("glProgramUniform4ui", glProgramUniform4ui, false) == false
            || getProcAddress("glProgramUniform4uiv", glProgramUniform4uiv, false) == false
            || getProcAddress("glProgramUniformMatrix2fv", glProgramUniformMatrix2fv, false) == false
            || getProcAddress("glProgramUniformMatrix3fv", glProgramUniformMatrix3fv, false) == false
            || getProcAddress("glProgramUniformMatrix4fv", glProgramUniformMatrix4fv, false) == false
            || getProcAddress("glProgramUniformMatrix2dv", glProgramUniformMatrix2dv, false) == false
            || getProcAddress("glProgramUniformMatrix3dv", glProgramUniformMatrix3dv, false) == false
            || getProcAddress("glProgramUniformMatrix4dv", glProgramUniformMatrix4dv, false) == false
            || getProcAddress("glProgramUniformMatrix2x3fv", glProgramUniformMatrix2x3fv, false) == false
            || getProcAddress("glProgramUniformMatrix3x2fv", glProgramUniformMatrix3x2fv, false) == false
            || getProcAddress("glProgramUniformMatrix2x4fv", glProgramUniformMatrix2x4fv, false) == false
            || getProcAddress("glProgramUniformMatrix4x2fv", glProgramUniformMatrix4x2fv, false) == false
            || getProcAddress("glProgramUniformMatrix3x4fv", glProgramUniformMatrix3x4fv, false) == false
            || getProcAddress("glProgramUniformMatrix4x3fv", glProgramUniformMatrix4x3fv, false) == false
            || getProcAddress("glProgramUniformMatrix2x3dv", glProgramUniformMatrix2x3dv, false) == false
            || getProcAddress("glProgramUniformMatrix3x2dv", glProgramUniformMatrix3x2dv, false) == false
            || getProcAddress("glProgramUniformMatrix2x4dv", glProgramUniformMatrix2x4dv, false) == false
            || getProcAddress("glProgramUniformMatrix4x2dv", glProgramUniformMatrix4x2dv, false) == false
            || getProcAddress("glProgramUniformMatrix3x4dv", glProgramUniformMatrix3x4dv, false) == false
            || getProcAddress("glProgramUniformMatrix4x3dv", glProgramUniformMatrix4x3dv, false) == false
            || getProcAddress("glValidateProgramPipeline", glValidateProgramPipeline, false) == false
            || getProcAddress("glGetProgramPipelineInfoLog", glGetProgramPipelineInfoLog, false) == false
        ){
            GL_ARB_separate_shader_objects_supported = false;
        }
    }

    if(GL_ARB_vertex_attrib_64bit_supported = isExtensionSupported("GL_ARB_vertex_attrib_64bit", false)){
        if(getProcAddress("glVertexAttribL1d", glVertexAttribL1d, false) == false
            || getProcAddress("glVertexAttribL2d", glVertexAttribL2d, false) == false
            || getProcAddress("glVertexAttribL3d", glVertexAttribL3d, false) == false
            || getProcAddress("glVertexAttribL4d", glVertexAttribL4d, false) == false
            || getProcAddress("glVertexAttribL1dv", glVertexAttribL1dv, false) == false
            || getProcAddress("glVertexAttribL2dv", glVertexAttribL2dv, false) == false
            || getProcAddress("glVertexAttribL3dv", glVertexAttribL3dv, false) == false
            || getProcAddress("glVertexAttribL4dv", glVertexAttribL4dv, false) == false
            || getProcAddress("glVertexAttribLPointer", glVertexAttribLPointer, false) == false
            || getProcAddress("glGetVertexAttribLdv", glGetVertexAttribLdv, false) == false
        ){
            GL_ARB_vertex_attrib_64bit_supported = false;
        }
    }

    if(GL_ARB_viewport_array_supported = isExtensionSupported("GL_ARB_viewport_array", false)){
        if(getProcAddress("glViewportArrayv", glViewportArrayv, false) == false
            || getProcAddress("glViewportIndexedf", glViewportIndexedf, false) == false
            || getProcAddress("glViewportIndexedfv", glViewportIndexedfv, false) == false
            || getProcAddress("glScissorArrayv", glScissorArrayv, false) == false
            || getProcAddress("glScissorIndexed", glScissorIndexed, false) == false
            || getProcAddress("glScissorIndexedv", glScissorIndexedv, false) == false
            || getProcAddress("glDepthRangeArrayv", glDepthRangeArrayv, false) == false
            || getProcAddress("glDepthRangeIndexed", glDepthRangeIndexed, false) == false
            || getProcAddress("glGetFloati_v", glGetFloati_v, false) == false
            || getProcAddress("glGetDoublei_v", glGetDoublei_v, false) == false
        ){
            GL_ARB_viewport_array_supported = false;
        }
    }

    if(GL_ARB_cl_event_supported = isExtensionSupported("GL_ARB_cl_event", false)){
        if(getProcAddress("glCreateSyncFromCLeventARB", glCreateSyncFromCLeventARB, false) == false
        ){
            GL_ARB_cl_event_supported = false;
        }
    }

    if(GL_ARB_debug_output_supported = isExtensionSupported("GL_ARB_debug_output", false)){
        if(getProcAddress("glDebugMessageControlARB", glDebugMessageControlARB, false) == false
            || getProcAddress("glDebugMessageInsertARB", glDebugMessageInsertARB, false) == false
            || getProcAddress("glDebugMessageCallbackARB", glDebugMessageCallbackARB, false) == false
            || getProcAddress("glGetDebugMessageLogARB", glGetDebugMessageLogARB, false) == false
        ){
            GL_ARB_debug_output_supported = false;
        }
    }

    if(GL_ARB_robustness_supported = isExtensionSupported("GL_ARB_robustness", false)){
        if(getProcAddress("glGetGraphicsResetStatusARB", glGetGraphicsResetStatusARB, false) == false
            || getProcAddress("glGetnTexImageARB", glGetnTexImageARB, false) == false
            || getProcAddress("glReadnPixelsARB", glReadnPixelsARB, false) == false
            || getProcAddress("glGetnCompressedTexImageARB", glGetnCompressedTexImageARB, false) == false
            || getProcAddress("glGetnUniformfvARB", glGetnUniformfvARB, false) == false
            || getProcAddress("glGetnUniformivARB", glGetnUniformivARB, false) == false
            || getProcAddress("glGetnUniformuivARB", glGetnUniformuivARB, false) == false
            || getProcAddress("glGetnUniformdvARB", glGetnUniformdvARB, false) == false
        ){
            GL_ARB_robustness_supported = false;
        }
    }
    GL_ARB_shader_stencil_export_supported = isExtensionSupported("GL_ARB_shader_stencil_export", false);

    if(GL_ARB_base_instance_supported = isExtensionSupported("GL_ARB_base_instance", false)){
        if(getProcAddress("glDrawArraysInstancedBaseInstance", glDrawArraysInstancedBaseInstance, false) == false
            || getProcAddress("glDrawElementsInstancedBaseInstance", glDrawElementsInstancedBaseInstance, false) == false
            || getProcAddress("glDrawElementsInstancedBaseVertexBaseInstance", glDrawElementsInstancedBaseVertexBaseInstance, false) == false
        ){
            GL_ARB_base_instance_supported = false;
        }
    }
    GL_ARB_shading_language_420pack_supported = isExtensionSupported("GL_ARB_shading_language_420pack", false);

    if(GL_ARB_transform_feedback_instanced_supported = isExtensionSupported("GL_ARB_transform_feedback_instanced", false)){
        if(getProcAddress("glDrawTransformFeedbackInstanced", glDrawTransformFeedbackInstanced, false) == false
            || getProcAddress("glDrawTransformFeedbackStreamInstanced", glDrawTransformFeedbackStreamInstanced, false) == false
        ){
            GL_ARB_transform_feedback_instanced_supported = false;
        }
    }
    GL_ARB_compressed_texture_pixel_storage_supported = isExtensionSupported("GL_ARB_compressed_texture_pixel_storage", false);
    GL_ARB_conservative_depth_supported = isExtensionSupported("GL_ARB_conservative_depth", false);

    if(GL_ARB_internalformat_query_supported = isExtensionSupported("GL_ARB_internalformat_query", false)){
        if(getProcAddress("glGetInternalformativ", glGetInternalformativ, false) == false
        ){
            GL_ARB_internalformat_query_supported = false;
        }
    }
    GL_ARB_map_buffer_alignment_supported = isExtensionSupported("GL_ARB_map_buffer_alignment", false);

    if(GL_ARB_shader_atomic_counters_supported = isExtensionSupported("GL_ARB_shader_atomic_counters", false)){
        if(getProcAddress("glGetActiveAtomicCounterBufferiv", glGetActiveAtomicCounterBufferiv, false) == false
        ){
            GL_ARB_shader_atomic_counters_supported = false;
        }
    }

    if(GL_ARB_shader_image_load_store_supported = isExtensionSupported("GL_ARB_shader_image_load_store", false)){
        if(getProcAddress("glBindImageTexture", glBindImageTexture, false) == false
            || getProcAddress("glMemoryBarrier", glMemoryBarrier, false) == false
        ){
            GL_ARB_shader_image_load_store_supported = false;
        }
    }
    GL_ARB_shading_language_packing_supported = isExtensionSupported("GL_ARB_shading_language_packing", false);

    if(GL_ARB_texture_storage_supported = isExtensionSupported("GL_ARB_texture_storage", false)){
        if(getProcAddress("glTexStorage1D", glTexStorage1D, false) == false
            || getProcAddress("glTexStorage2D", glTexStorage2D, false) == false
            || getProcAddress("glTexStorage3D", glTexStorage3D, false) == false
            || getProcAddress("glTextureStorage1DEXT", glTextureStorage1DEXT, false) == false
            || getProcAddress("glTextureStorage2DEXT", glTextureStorage2DEXT, false) == false
            || getProcAddress("glTextureStorage3DEXT", glTextureStorage3DEXT, false) == false
        ){
            GL_ARB_texture_storage_supported = false;
        }
    }
    GL_KHR_texture_compression_astc_ldr_supported = isExtensionSupported("GL_KHR_texture_compression_astc_ldr", false);

    if(GL_KHR_debug_supported = isExtensionSupported("GL_KHR_debug", false)){
        if(getProcAddress("glDebugMessageControl", glDebugMessageControl, false) == false
            || getProcAddress("glDebugMessageInsert", glDebugMessageInsert, false) == false
            || getProcAddress("glDebugMessageCallback", glDebugMessageCallback, false) == false
            || getProcAddress("glGetDebugMessageLog", glGetDebugMessageLog, false) == false
            || getProcAddress("glPushDebugGroup", glPushDebugGroup, false) == false
            || getProcAddress("glPopDebugGroup", glPopDebugGroup, false) == false
            || getProcAddress("glObjectLabel", glObjectLabel, false) == false
            || getProcAddress("glGetObjectLabel", glGetObjectLabel, false) == false
            || getProcAddress("glObjectPtrLabel", glObjectPtrLabel, false) == false
            || getProcAddress("glGetObjectPtrLabel", glGetObjectPtrLabel, false) == false
        ){
            GL_KHR_debug_supported = false;
        }
    }
    GL_ARB_arrays_of_arrays_supported = isExtensionSupported("GL_ARB_arrays_of_arrays", false);

    if(GL_ARB_clear_buffer_object_supported = isExtensionSupported("GL_ARB_clear_buffer_object", false)){
        if(getProcAddress("glClearBufferData", glClearBufferData, false) == false
            || getProcAddress("glClearBufferSubData", glClearBufferSubData, false) == false
            || getProcAddress("glClearNamedBufferDataEXT", glClearNamedBufferDataEXT, false) == false
            || getProcAddress("glClearNamedBufferSubDataEXT", glClearNamedBufferSubDataEXT, false) == false
        ){
            GL_ARB_clear_buffer_object_supported = false;
        }
    }

    if(GL_ARB_compute_shader_supported = isExtensionSupported("GL_ARB_compute_shader", false)){
        if(getProcAddress("glDispatchCompute", glDispatchCompute, false) == false
            || getProcAddress("glDispatchComputeIndirect", glDispatchComputeIndirect, false) == false
        ){
            GL_ARB_compute_shader_supported = false;
        }
    }

    if(GL_ARB_copy_image_supported = isExtensionSupported("GL_ARB_copy_image", false)){
        if(getProcAddress("glCopyImageSubData", glCopyImageSubData, false) == false
        ){
            GL_ARB_copy_image_supported = false;
        }
    }

    if(GL_ARB_texture_view_supported = isExtensionSupported("GL_ARB_texture_view", false)){
        if(getProcAddress("glTextureView", glTextureView, false) == false
        ){
            GL_ARB_texture_view_supported = false;
        }
    }

    if(GL_ARB_vertex_attrib_binding_supported = isExtensionSupported("GL_ARB_vertex_attrib_binding", false)){
        if(getProcAddress("glBindVertexBuffer", glBindVertexBuffer, false) == false
            || getProcAddress("glVertexAttribFormat", glVertexAttribFormat, false) == false
            || getProcAddress("glVertexAttribIFormat", glVertexAttribIFormat, false) == false
            || getProcAddress("glVertexAttribLFormat", glVertexAttribLFormat, false) == false
            || getProcAddress("glVertexAttribBinding", glVertexAttribBinding, false) == false
            || getProcAddress("glVertexBindingDivisor", glVertexBindingDivisor, false) == false
            || getProcAddress("glVertexArrayBindVertexBufferEXT", glVertexArrayBindVertexBufferEXT, false) == false
            || getProcAddress("glVertexArrayVertexAttribFormatEXT", glVertexArrayVertexAttribFormatEXT, false) == false
            || getProcAddress("glVertexArrayVertexAttribIFormatEXT", glVertexArrayVertexAttribIFormatEXT, false) == false
            || getProcAddress("glVertexArrayVertexAttribLFormatEXT", glVertexArrayVertexAttribLFormatEXT, false) == false
            || getProcAddress("glVertexArrayVertexAttribBindingEXT", glVertexArrayVertexAttribBindingEXT, false) == false
            || getProcAddress("glVertexArrayVertexBindingDivisorEXT", glVertexArrayVertexBindingDivisorEXT, false) == false
        ){
            GL_ARB_vertex_attrib_binding_supported = false;
        }
    }
    GL_ARB_robustness_isolation_supported = isExtensionSupported("GL_ARB_robustness_isolation", false);
    GL_ARB_ES3_compatibility_supported = isExtensionSupported("GL_ARB_ES3_compatibility", false);
    GL_ARB_explicit_uniform_location_supported = isExtensionSupported("GL_ARB_explicit_uniform_location", false);
    GL_ARB_fragment_layer_viewport_supported = isExtensionSupported("GL_ARB_fragment_layer_viewport", false);

    if(GL_ARB_framebuffer_no_attachments_supported = isExtensionSupported("GL_ARB_framebuffer_no_attachments", false)){
        if(getProcAddress("glFramebufferParameteri", glFramebufferParameteri, false) == false
            || getProcAddress("glGetFramebufferParameteriv", glGetFramebufferParameteriv, false) == false
            || getProcAddress("glNamedFramebufferParameteriEXT", glNamedFramebufferParameteriEXT, false) == false
            || getProcAddress("glGetNamedFramebufferParameterivEXT", glGetNamedFramebufferParameterivEXT, false) == false
        ){
            GL_ARB_framebuffer_no_attachments_supported = false;
        }
    }

    if(GL_ARB_internalformat_query2_supported = isExtensionSupported("GL_ARB_internalformat_query2", false)){
        if(getProcAddress("glGetInternalformati64v", glGetInternalformati64v, false) == false
        ){
            GL_ARB_internalformat_query2_supported = false;
        }
    }

    if(GL_ARB_invalidate_subdata_supported = isExtensionSupported("GL_ARB_invalidate_subdata", false)){
        if(getProcAddress("glInvalidateTexSubImage", glInvalidateTexSubImage, false) == false
            || getProcAddress("glInvalidateTexImage", glInvalidateTexImage, false) == false
            || getProcAddress("glInvalidateBufferSubData", glInvalidateBufferSubData, false) == false
            || getProcAddress("glInvalidateBufferData", glInvalidateBufferData, false) == false
            || getProcAddress("glInvalidateFramebuffer", glInvalidateFramebuffer, false) == false
            || getProcAddress("glInvalidateSubFramebuffer", glInvalidateSubFramebuffer, false) == false
        ){
            GL_ARB_invalidate_subdata_supported = false;
        }
    }

    if(GL_ARB_multi_draw_indirect_supported = isExtensionSupported("GL_ARB_multi_draw_indirect", false)){
        if(getProcAddress("glMultiDrawArraysIndirect", glMultiDrawArraysIndirect, false) == false
            || getProcAddress("glMultiDrawElementsIndirect", glMultiDrawElementsIndirect, false) == false
        ){
            GL_ARB_multi_draw_indirect_supported = false;
        }
    }

    if(GL_ARB_program_interface_query_supported = isExtensionSupported("GL_ARB_program_interface_query", false)){
        if(getProcAddress("glGetProgramInterfaceiv", glGetProgramInterfaceiv, false) == false
            || getProcAddress("glGetProgramResourceIndex", glGetProgramResourceIndex, false) == false
            || getProcAddress("glGetProgramResourceName", glGetProgramResourceName, false) == false
            || getProcAddress("glGetProgramResourceiv", glGetProgramResourceiv, false) == false
            || getProcAddress("glGetProgramResourceLocation", glGetProgramResourceLocation, false) == false
            || getProcAddress("glGetProgramResourceLocationIndex", glGetProgramResourceLocationIndex, false) == false
        ){
            GL_ARB_program_interface_query_supported = false;
        }
    }
    GL_ARB_robust_buffer_access_behavior_supported = isExtensionSupported("GL_ARB_robust_buffer_access_behavior", false);
    GL_ARB_shader_image_size_supported = isExtensionSupported("GL_ARB_shader_image_size", false);

    if(GL_ARB_shader_storage_buffer_object_supported = isExtensionSupported("GL_ARB_shader_storage_buffer_object", false)){
        if(getProcAddress("glShaderStorageBlockBinding", glShaderStorageBlockBinding, false) == false
        ){
            GL_ARB_shader_storage_buffer_object_supported = false;
        }
    }
    GL_ARB_stencil_texturing_supported = isExtensionSupported("GL_ARB_stencil_texturing", false);

    if(GL_ARB_texture_buffer_range_supported = isExtensionSupported("GL_ARB_texture_buffer_range", false)){
        if(getProcAddress("glTexBufferRange", glTexBufferRange, false) == false
            || getProcAddress("glTextureBufferRangeEXT", glTextureBufferRangeEXT, false) == false
        ){
            GL_ARB_texture_buffer_range_supported = false;
        }
    }
    GL_ARB_texture_query_levels_supported = isExtensionSupported("GL_ARB_texture_query_levels", false);

    if(GL_ARB_texture_storage_multisample_supported = isExtensionSupported("GL_ARB_texture_storage_multisample", false)){
        if(getProcAddress("glTexStorage2DMultisample", glTexStorage2DMultisample, false) == false
            || getProcAddress("glTexStorage3DMultisample", glTexStorage3DMultisample, false) == false
            || getProcAddress("glTextureStorage2DMultisampleEXT", glTextureStorage2DMultisampleEXT, false) == false
            || getProcAddress("glTextureStorage3DMultisampleEXT", glTextureStorage3DMultisampleEXT, false) == false
        ){
            GL_ARB_texture_storage_multisample_supported = false;
        }
    }
    GL_EXT_abgr_supported = isExtensionSupported("GL_EXT_abgr", false);

    if(GL_EXT_blend_color_supported = isExtensionSupported("GL_EXT_blend_color", false)){
        if(getProcAddress("glBlendColorEXT", glBlendColorEXT, false) == false
        ){
            GL_EXT_blend_color_supported = false;
        }
    }

    if(GL_EXT_polygon_offset_supported = isExtensionSupported("GL_EXT_polygon_offset", false)){
        if(getProcAddress("glPolygonOffsetEXT", glPolygonOffsetEXT, false) == false
        ){
            GL_EXT_polygon_offset_supported = false;
        }
    }
    GL_EXT_texture_supported = isExtensionSupported("GL_EXT_texture", false);

    if(GL_EXT_texture3D_supported = isExtensionSupported("GL_EXT_texture3D", false)){
        if(getProcAddress("glTexImage3DEXT", glTexImage3DEXT, false) == false
            || getProcAddress("glTexSubImage3DEXT", glTexSubImage3DEXT, false) == false
        ){
            GL_EXT_texture3D_supported = false;
        }
    }

    if(GL_SGIS_texture_filter4_supported = isExtensionSupported("GL_SGIS_texture_filter4", false)){
        if(getProcAddress("glGetTexFilterFuncSGIS", glGetTexFilterFuncSGIS, false) == false
            || getProcAddress("glTexFilterFuncSGIS", glTexFilterFuncSGIS, false) == false
        ){
            GL_SGIS_texture_filter4_supported = false;
        }
    }

    if(GL_EXT_subtexture_supported = isExtensionSupported("GL_EXT_subtexture", false)){
        if(getProcAddress("glTexSubImage1DEXT", glTexSubImage1DEXT, false) == false
            || getProcAddress("glTexSubImage2DEXT", glTexSubImage2DEXT, false) == false
        ){
            GL_EXT_subtexture_supported = false;
        }
    }

    if(GL_EXT_copy_texture_supported = isExtensionSupported("GL_EXT_copy_texture", false)){
        if(getProcAddress("glCopyTexImage1DEXT", glCopyTexImage1DEXT, false) == false
            || getProcAddress("glCopyTexImage2DEXT", glCopyTexImage2DEXT, false) == false
            || getProcAddress("glCopyTexSubImage1DEXT", glCopyTexSubImage1DEXT, false) == false
            || getProcAddress("glCopyTexSubImage2DEXT", glCopyTexSubImage2DEXT, false) == false
            || getProcAddress("glCopyTexSubImage3DEXT", glCopyTexSubImage3DEXT, false) == false
        ){
            GL_EXT_copy_texture_supported = false;
        }
    }

    if(GL_EXT_histogram_supported = isExtensionSupported("GL_EXT_histogram", false)){
        if(getProcAddress("glGetHistogramEXT", glGetHistogramEXT, false) == false
            || getProcAddress("glGetHistogramParameterfvEXT", glGetHistogramParameterfvEXT, false) == false
            || getProcAddress("glGetHistogramParameterivEXT", glGetHistogramParameterivEXT, false) == false
            || getProcAddress("glGetMinmaxEXT", glGetMinmaxEXT, false) == false
            || getProcAddress("glGetMinmaxParameterfvEXT", glGetMinmaxParameterfvEXT, false) == false
            || getProcAddress("glGetMinmaxParameterivEXT", glGetMinmaxParameterivEXT, false) == false
            || getProcAddress("glHistogramEXT", glHistogramEXT, false) == false
            || getProcAddress("glMinmaxEXT", glMinmaxEXT, false) == false
            || getProcAddress("glResetHistogramEXT", glResetHistogramEXT, false) == false
            || getProcAddress("glResetMinmaxEXT", glResetMinmaxEXT, false) == false
        ){
            GL_EXT_histogram_supported = false;
        }
    }

    if(GL_EXT_convolution_supported = isExtensionSupported("GL_EXT_convolution", false)){
        if(getProcAddress("glConvolutionFilter1DEXT", glConvolutionFilter1DEXT, false) == false
            || getProcAddress("glConvolutionFilter2DEXT", glConvolutionFilter2DEXT, false) == false
            || getProcAddress("glConvolutionParameterfEXT", glConvolutionParameterfEXT, false) == false
            || getProcAddress("glConvolutionParameterfvEXT", glConvolutionParameterfvEXT, false) == false
            || getProcAddress("glConvolutionParameteriEXT", glConvolutionParameteriEXT, false) == false
            || getProcAddress("glConvolutionParameterivEXT", glConvolutionParameterivEXT, false) == false
            || getProcAddress("glCopyConvolutionFilter1DEXT", glCopyConvolutionFilter1DEXT, false) == false
            || getProcAddress("glCopyConvolutionFilter2DEXT", glCopyConvolutionFilter2DEXT, false) == false
            || getProcAddress("glGetConvolutionFilterEXT", glGetConvolutionFilterEXT, false) == false
            || getProcAddress("glGetConvolutionParameterfvEXT", glGetConvolutionParameterfvEXT, false) == false
            || getProcAddress("glGetConvolutionParameterivEXT", glGetConvolutionParameterivEXT, false) == false
            || getProcAddress("glGetSeparableFilterEXT", glGetSeparableFilterEXT, false) == false
            || getProcAddress("glSeparableFilter2DEXT", glSeparableFilter2DEXT, false) == false
        ){
            GL_EXT_convolution_supported = false;
        }
    }
    GL_SGI_color_matrix_supported = isExtensionSupported("GL_SGI_color_matrix", false);

    if(GL_SGI_color_table_supported = isExtensionSupported("GL_SGI_color_table", false)){
        if(getProcAddress("glColorTableSGI", glColorTableSGI, false) == false
            || getProcAddress("glColorTableParameterfvSGI", glColorTableParameterfvSGI, false) == false
            || getProcAddress("glColorTableParameterivSGI", glColorTableParameterivSGI, false) == false
            || getProcAddress("glCopyColorTableSGI", glCopyColorTableSGI, false) == false
            || getProcAddress("glGetColorTableSGI", glGetColorTableSGI, false) == false
            || getProcAddress("glGetColorTableParameterfvSGI", glGetColorTableParameterfvSGI, false) == false
            || getProcAddress("glGetColorTableParameterivSGI", glGetColorTableParameterivSGI, false) == false
        ){
            GL_SGI_color_table_supported = false;
        }
    }

    if(GL_SGIX_pixel_texture_supported = isExtensionSupported("GL_SGIX_pixel_texture", false)){
        if(getProcAddress("glPixelTexGenSGIX", glPixelTexGenSGIX, false) == false
        ){
            GL_SGIX_pixel_texture_supported = false;
        }
    }

    if(GL_SGIS_pixel_texture_supported = isExtensionSupported("GL_SGIS_pixel_texture", false)){
        if(getProcAddress("glPixelTexGenParameteriSGIS", glPixelTexGenParameteriSGIS, false) == false
            || getProcAddress("glPixelTexGenParameterivSGIS", glPixelTexGenParameterivSGIS, false) == false
            || getProcAddress("glPixelTexGenParameterfSGIS", glPixelTexGenParameterfSGIS, false) == false
            || getProcAddress("glPixelTexGenParameterfvSGIS", glPixelTexGenParameterfvSGIS, false) == false
            || getProcAddress("glGetPixelTexGenParameterivSGIS", glGetPixelTexGenParameterivSGIS, false) == false
            || getProcAddress("glGetPixelTexGenParameterfvSGIS", glGetPixelTexGenParameterfvSGIS, false) == false
        ){
            GL_SGIS_pixel_texture_supported = false;
        }
    }

    if(GL_SGIS_texture4D_supported = isExtensionSupported("GL_SGIS_texture4D", false)){
        if(getProcAddress("glTexImage4DSGIS", glTexImage4DSGIS, false) == false
            || getProcAddress("glTexSubImage4DSGIS", glTexSubImage4DSGIS, false) == false
        ){
            GL_SGIS_texture4D_supported = false;
        }
    }
    GL_SGI_texture_color_table_supported = isExtensionSupported("GL_SGI_texture_color_table", false);
    GL_EXT_cmyka_supported = isExtensionSupported("GL_EXT_cmyka", false);

    if(GL_EXT_texture_object_supported = isExtensionSupported("GL_EXT_texture_object", false)){
        if(getProcAddress("glAreTexturesResidentEXT", glAreTexturesResidentEXT, false) == false
            || getProcAddress("glBindTextureEXT", glBindTextureEXT, false) == false
            || getProcAddress("glDeleteTexturesEXT", glDeleteTexturesEXT, false) == false
            || getProcAddress("glGenTexturesEXT", glGenTexturesEXT, false) == false
            || getProcAddress("glIsTextureEXT", glIsTextureEXT, false) == false
            || getProcAddress("glPrioritizeTexturesEXT", glPrioritizeTexturesEXT, false) == false
        ){
            GL_EXT_texture_object_supported = false;
        }
    }

    if(GL_SGIS_detail_texture_supported = isExtensionSupported("GL_SGIS_detail_texture", false)){
        if(getProcAddress("glDetailTexFuncSGIS", glDetailTexFuncSGIS, false) == false
            || getProcAddress("glGetDetailTexFuncSGIS", glGetDetailTexFuncSGIS, false) == false
        ){
            GL_SGIS_detail_texture_supported = false;
        }
    }

    if(GL_SGIS_sharpen_texture_supported = isExtensionSupported("GL_SGIS_sharpen_texture", false)){
        if(getProcAddress("glSharpenTexFuncSGIS", glSharpenTexFuncSGIS, false) == false
            || getProcAddress("glGetSharpenTexFuncSGIS", glGetSharpenTexFuncSGIS, false) == false
        ){
            GL_SGIS_sharpen_texture_supported = false;
        }
    }
    GL_EXT_packed_pixels_supported = isExtensionSupported("GL_EXT_packed_pixels", false);
    GL_SGIS_texture_lod_supported = isExtensionSupported("GL_SGIS_texture_lod", false);

    if(GL_SGIS_multisample_supported = isExtensionSupported("GL_SGIS_multisample", false)){
        if(getProcAddress("glSampleMaskSGIS", glSampleMaskSGIS, false) == false
            || getProcAddress("glSamplePatternSGIS", glSamplePatternSGIS, false) == false
        ){
            GL_SGIS_multisample_supported = false;
        }
    }
    GL_EXT_rescale_normal_supported = isExtensionSupported("GL_EXT_rescale_normal", false);

    if(GL_EXT_vertex_array_supported = isExtensionSupported("GL_EXT_vertex_array", false)){
        if(getProcAddress("glArrayElementEXT", glArrayElementEXT, false) == false
            || getProcAddress("glColorPointerEXT", glColorPointerEXT, false) == false
            || getProcAddress("glDrawArraysEXT", glDrawArraysEXT, false) == false
            || getProcAddress("glEdgeFlagPointerEXT", glEdgeFlagPointerEXT, false) == false
            || getProcAddress("glGetPointervEXT", glGetPointervEXT, false) == false
            || getProcAddress("glIndexPointerEXT", glIndexPointerEXT, false) == false
            || getProcAddress("glNormalPointerEXT", glNormalPointerEXT, false) == false
            || getProcAddress("glTexCoordPointerEXT", glTexCoordPointerEXT, false) == false
            || getProcAddress("glVertexPointerEXT", glVertexPointerEXT, false) == false
        ){
            GL_EXT_vertex_array_supported = false;
        }
    }
    GL_EXT_misc_attribute_supported = isExtensionSupported("GL_EXT_misc_attribute", false);
    GL_SGIS_generate_mipmap_supported = isExtensionSupported("GL_SGIS_generate_mipmap", false);
    GL_SGIX_clipmap_supported = isExtensionSupported("GL_SGIX_clipmap", false);
    GL_SGIX_shadow_supported = isExtensionSupported("GL_SGIX_shadow", false);
    GL_SGIS_texture_edge_clamp_supported = isExtensionSupported("GL_SGIS_texture_edge_clamp", false);
    GL_SGIS_texture_border_clamp_supported = isExtensionSupported("GL_SGIS_texture_border_clamp", false);

    if(GL_EXT_blend_minmax_supported = isExtensionSupported("GL_EXT_blend_minmax", false)){
        if(getProcAddress("glBlendEquationEXT", glBlendEquationEXT, false) == false
        ){
            GL_EXT_blend_minmax_supported = false;
        }
    }
    GL_EXT_blend_subtract_supported = isExtensionSupported("GL_EXT_blend_subtract", false);
    GL_EXT_blend_logic_op_supported = isExtensionSupported("GL_EXT_blend_logic_op", false);
    GL_SGIX_interlace_supported = isExtensionSupported("GL_SGIX_interlace", false);
    GL_SGIX_pixel_tiles_supported = isExtensionSupported("GL_SGIX_pixel_tiles", false);
    GL_SGIX_texture_select_supported = isExtensionSupported("GL_SGIX_texture_select", false);

    if(GL_SGIX_sprite_supported = isExtensionSupported("GL_SGIX_sprite", false)){
        if(getProcAddress("glSpriteParameterfSGIX", glSpriteParameterfSGIX, false) == false
            || getProcAddress("glSpriteParameterfvSGIX", glSpriteParameterfvSGIX, false) == false
            || getProcAddress("glSpriteParameteriSGIX", glSpriteParameteriSGIX, false) == false
            || getProcAddress("glSpriteParameterivSGIX", glSpriteParameterivSGIX, false) == false
        ){
            GL_SGIX_sprite_supported = false;
        }
    }
    GL_SGIX_texture_multi_buffer_supported = isExtensionSupported("GL_SGIX_texture_multi_buffer", false);

    if(GL_EXT_point_parameters_supported = isExtensionSupported("GL_EXT_point_parameters", false)){
        if(getProcAddress("glPointParameterfEXT", glPointParameterfEXT, false) == false
            || getProcAddress("glPointParameterfvEXT", glPointParameterfvEXT, false) == false
        ){
            GL_EXT_point_parameters_supported = false;
        }
    }

    if(GL_SGIS_point_parameters_supported = isExtensionSupported("GL_SGIS_point_parameters", false)){
        if(getProcAddress("glPointParameterfSGIS", glPointParameterfSGIS, false) == false
            || getProcAddress("glPointParameterfvSGIS", glPointParameterfvSGIS, false) == false
        ){
            GL_SGIS_point_parameters_supported = false;
        }
    }

    if(GL_SGIX_instruments_supported = isExtensionSupported("GL_SGIX_instruments", false)){
        if(getProcAddress("glGetInstrumentsSGIX", glGetInstrumentsSGIX, false) == false
            || getProcAddress("glInstrumentsBufferSGIX", glInstrumentsBufferSGIX, false) == false
            || getProcAddress("glPollInstrumentsSGIX", glPollInstrumentsSGIX, false) == false
            || getProcAddress("glReadInstrumentsSGIX", glReadInstrumentsSGIX, false) == false
            || getProcAddress("glStartInstrumentsSGIX", glStartInstrumentsSGIX, false) == false
            || getProcAddress("glStopInstrumentsSGIX", glStopInstrumentsSGIX, false) == false
        ){
            GL_SGIX_instruments_supported = false;
        }
    }
    GL_SGIX_texture_scale_bias_supported = isExtensionSupported("GL_SGIX_texture_scale_bias", false);

    if(GL_SGIX_framezoom_supported = isExtensionSupported("GL_SGIX_framezoom", false)){
        if(getProcAddress("glFrameZoomSGIX", glFrameZoomSGIX, false) == false
        ){
            GL_SGIX_framezoom_supported = false;
        }
    }

    if(GL_SGIX_tag_sample_buffer_supported = isExtensionSupported("GL_SGIX_tag_sample_buffer", false)){
        if(getProcAddress("glTagSampleBufferSGIX", glTagSampleBufferSGIX, false) == false
        ){
            GL_SGIX_tag_sample_buffer_supported = false;
        }
    }

    if(GL_SGIX_polynomial_ffd_supported = isExtensionSupported("GL_SGIX_polynomial_ffd", false)){
        if(getProcAddress("glDeformationMap3dSGIX", glDeformationMap3dSGIX, false) == false
            || getProcAddress("glDeformationMap3fSGIX", glDeformationMap3fSGIX, false) == false
            || getProcAddress("glDeformSGIX", glDeformSGIX, false) == false
            || getProcAddress("glLoadIdentityDeformationMapSGIX", glLoadIdentityDeformationMapSGIX, false) == false
        ){
            GL_SGIX_polynomial_ffd_supported = false;
        }
    }

    if(GL_SGIX_reference_plane_supported = isExtensionSupported("GL_SGIX_reference_plane", false)){
        if(getProcAddress("glReferencePlaneSGIX", glReferencePlaneSGIX, false) == false
        ){
            GL_SGIX_reference_plane_supported = false;
        }
    }

    if(GL_SGIX_flush_raster_supported = isExtensionSupported("GL_SGIX_flush_raster", false)){
        if(getProcAddress("glFlushRasterSGIX", glFlushRasterSGIX, false) == false
        ){
            GL_SGIX_flush_raster_supported = false;
        }
    }
    GL_SGIX_depth_texture_supported = isExtensionSupported("GL_SGIX_depth_texture", false);

    if(GL_SGIS_fog_function_supported = isExtensionSupported("GL_SGIS_fog_function", false)){
        if(getProcAddress("glFogFuncSGIS", glFogFuncSGIS, false) == false
            || getProcAddress("glGetFogFuncSGIS", glGetFogFuncSGIS, false) == false
        ){
            GL_SGIS_fog_function_supported = false;
        }
    }
    GL_SGIX_fog_offset_supported = isExtensionSupported("GL_SGIX_fog_offset", false);

    if(GL_HP_image_transform_supported = isExtensionSupported("GL_HP_image_transform", false)){
        if(getProcAddress("glImageTransformParameteriHP", glImageTransformParameteriHP, false) == false
            || getProcAddress("glImageTransformParameterfHP", glImageTransformParameterfHP, false) == false
            || getProcAddress("glImageTransformParameterivHP", glImageTransformParameterivHP, false) == false
            || getProcAddress("glImageTransformParameterfvHP", glImageTransformParameterfvHP, false) == false
            || getProcAddress("glGetImageTransformParameterivHP", glGetImageTransformParameterivHP, false) == false
            || getProcAddress("glGetImageTransformParameterfvHP", glGetImageTransformParameterfvHP, false) == false
        ){
            GL_HP_image_transform_supported = false;
        }
    }
    GL_HP_convolution_border_modes_supported = isExtensionSupported("GL_HP_convolution_border_modes", false);
    GL_SGIX_texture_add_env_supported = isExtensionSupported("GL_SGIX_texture_add_env", false);

    if(GL_EXT_color_subtable_supported = isExtensionSupported("GL_EXT_color_subtable", false)){
        if(getProcAddress("glColorSubTableEXT", glColorSubTableEXT, false) == false
            || getProcAddress("glCopyColorSubTableEXT", glCopyColorSubTableEXT, false) == false
        ){
            GL_EXT_color_subtable_supported = false;
        }
    }
    GL_PGI_vertex_hints_supported = isExtensionSupported("GL_PGI_vertex_hints", false);

    if(GL_PGI_misc_hints_supported = isExtensionSupported("GL_PGI_misc_hints", false)){
        if(getProcAddress("glHintPGI", glHintPGI, false) == false
        ){
            GL_PGI_misc_hints_supported = false;
        }
    }

    if(GL_EXT_paletted_texture_supported = isExtensionSupported("GL_EXT_paletted_texture", false)){
        if(getProcAddress("glColorTableEXT", glColorTableEXT, false) == false
            || getProcAddress("glGetColorTableEXT", glGetColorTableEXT, false) == false
            || getProcAddress("glGetColorTableParameterivEXT", glGetColorTableParameterivEXT, false) == false
            || getProcAddress("glGetColorTableParameterfvEXT", glGetColorTableParameterfvEXT, false) == false
        ){
            GL_EXT_paletted_texture_supported = false;
        }
    }
    GL_EXT_clip_volume_hint_supported = isExtensionSupported("GL_EXT_clip_volume_hint", false);

    if(GL_SGIX_list_priority_supported = isExtensionSupported("GL_SGIX_list_priority", false)){
        if(getProcAddress("glGetListParameterfvSGIX", glGetListParameterfvSGIX, false) == false
            || getProcAddress("glGetListParameterivSGIX", glGetListParameterivSGIX, false) == false
            || getProcAddress("glListParameterfSGIX", glListParameterfSGIX, false) == false
            || getProcAddress("glListParameterfvSGIX", glListParameterfvSGIX, false) == false
            || getProcAddress("glListParameteriSGIX", glListParameteriSGIX, false) == false
            || getProcAddress("glListParameterivSGIX", glListParameterivSGIX, false) == false
        ){
            GL_SGIX_list_priority_supported = false;
        }
    }
    GL_SGIX_ir_instrument1_supported = isExtensionSupported("GL_SGIX_ir_instrument1", false);
    GL_SGIX_calligraphic_fragment_supported = isExtensionSupported("GL_SGIX_calligraphic_fragment", false);
    GL_SGIX_texture_lod_bias_supported = isExtensionSupported("GL_SGIX_texture_lod_bias", false);
    GL_SGIX_shadow_ambient_supported = isExtensionSupported("GL_SGIX_shadow_ambient", false);
    GL_EXT_index_texture_supported = isExtensionSupported("GL_EXT_index_texture", false);

    if(GL_EXT_index_material_supported = isExtensionSupported("GL_EXT_index_material", false)){
        if(getProcAddress("glIndexMaterialEXT", glIndexMaterialEXT, false) == false
        ){
            GL_EXT_index_material_supported = false;
        }
    }

    if(GL_EXT_index_func_supported = isExtensionSupported("GL_EXT_index_func", false)){
        if(getProcAddress("glIndexFuncEXT", glIndexFuncEXT, false) == false
        ){
            GL_EXT_index_func_supported = false;
        }
    }
    GL_EXT_index_array_formats_supported = isExtensionSupported("GL_EXT_index_array_formats", false);

    if(GL_EXT_compiled_vertex_array_supported = isExtensionSupported("GL_EXT_compiled_vertex_array", false)){
        if(getProcAddress("glLockArraysEXT", glLockArraysEXT, false) == false
            || getProcAddress("glUnlockArraysEXT", glUnlockArraysEXT, false) == false
        ){
            GL_EXT_compiled_vertex_array_supported = false;
        }
    }

    if(GL_EXT_cull_vertex_supported = isExtensionSupported("GL_EXT_cull_vertex", false)){
        if(getProcAddress("glCullParameterdvEXT", glCullParameterdvEXT, false) == false
            || getProcAddress("glCullParameterfvEXT", glCullParameterfvEXT, false) == false
        ){
            GL_EXT_cull_vertex_supported = false;
        }
    }
    GL_SGIX_ycrcb_supported = isExtensionSupported("GL_SGIX_ycrcb", false);

    if(GL_SGIX_fragment_lighting_supported = isExtensionSupported("GL_SGIX_fragment_lighting", false)){
        if(getProcAddress("glFragmentColorMaterialSGIX", glFragmentColorMaterialSGIX, false) == false
            || getProcAddress("glFragmentLightfSGIX", glFragmentLightfSGIX, false) == false
            || getProcAddress("glFragmentLightfvSGIX", glFragmentLightfvSGIX, false) == false
            || getProcAddress("glFragmentLightiSGIX", glFragmentLightiSGIX, false) == false
            || getProcAddress("glFragmentLightivSGIX", glFragmentLightivSGIX, false) == false
            || getProcAddress("glFragmentLightModelfSGIX", glFragmentLightModelfSGIX, false) == false
            || getProcAddress("glFragmentLightModelfvSGIX", glFragmentLightModelfvSGIX, false) == false
            || getProcAddress("glFragmentLightModeliSGIX", glFragmentLightModeliSGIX, false) == false
            || getProcAddress("glFragmentLightModelivSGIX", glFragmentLightModelivSGIX, false) == false
            || getProcAddress("glFragmentMaterialfSGIX", glFragmentMaterialfSGIX, false) == false
            || getProcAddress("glFragmentMaterialfvSGIX", glFragmentMaterialfvSGIX, false) == false
            || getProcAddress("glFragmentMaterialiSGIX", glFragmentMaterialiSGIX, false) == false
            || getProcAddress("glFragmentMaterialivSGIX", glFragmentMaterialivSGIX, false) == false
            || getProcAddress("glGetFragmentLightfvSGIX", glGetFragmentLightfvSGIX, false) == false
            || getProcAddress("glGetFragmentLightivSGIX", glGetFragmentLightivSGIX, false) == false
            || getProcAddress("glGetFragmentMaterialfvSGIX", glGetFragmentMaterialfvSGIX, false) == false
            || getProcAddress("glGetFragmentMaterialivSGIX", glGetFragmentMaterialivSGIX, false) == false
            || getProcAddress("glLightEnviSGIX", glLightEnviSGIX, false) == false
        ){
            GL_SGIX_fragment_lighting_supported = false;
        }
    }
    GL_IBM_rasterpos_clip_supported = isExtensionSupported("GL_IBM_rasterpos_clip", false);
    GL_HP_texture_lighting_supported = isExtensionSupported("GL_HP_texture_lighting", false);

    if(GL_EXT_draw_range_elements_supported = isExtensionSupported("GL_EXT_draw_range_elements", false)){
        if(getProcAddress("glDrawRangeElementsEXT", glDrawRangeElementsEXT, false) == false
        ){
            GL_EXT_draw_range_elements_supported = false;
        }
    }
    GL_WIN_phong_shading_supported = isExtensionSupported("GL_WIN_phong_shading", false);
    GL_WIN_specular_fog_supported = isExtensionSupported("GL_WIN_specular_fog", false);

    if(GL_EXT_light_texture_supported = isExtensionSupported("GL_EXT_light_texture", false)){
        if(getProcAddress("glApplyTextureEXT", glApplyTextureEXT, false) == false
            || getProcAddress("glTextureLightEXT", glTextureLightEXT, false) == false
            || getProcAddress("glTextureMaterialEXT", glTextureMaterialEXT, false) == false
        ){
            GL_EXT_light_texture_supported = false;
        }
    }
    GL_SGIX_blend_alpha_minmax_supported = isExtensionSupported("GL_SGIX_blend_alpha_minmax", false);
    GL_EXT_bgra_supported = isExtensionSupported("GL_EXT_bgra", false);

    if(GL_SGIX_async_supported = isExtensionSupported("GL_SGIX_async", false)){
        if(getProcAddress("glAsyncMarkerSGIX", glAsyncMarkerSGIX, false) == false
            || getProcAddress("glFinishAsyncSGIX", glFinishAsyncSGIX, false) == false
            || getProcAddress("glPollAsyncSGIX", glPollAsyncSGIX, false) == false
            || getProcAddress("glGenAsyncMarkersSGIX", glGenAsyncMarkersSGIX, false) == false
            || getProcAddress("glDeleteAsyncMarkersSGIX", glDeleteAsyncMarkersSGIX, false) == false
            || getProcAddress("glIsAsyncMarkerSGIX", glIsAsyncMarkerSGIX, false) == false
        ){
            GL_SGIX_async_supported = false;
        }
    }
    GL_SGIX_async_pixel_supported = isExtensionSupported("GL_SGIX_async_pixel", false);
    GL_SGIX_async_histogram_supported = isExtensionSupported("GL_SGIX_async_histogram", false);

    if(GL_INTEL_parallel_arrays_supported = isExtensionSupported("GL_INTEL_parallel_arrays", false)){
        if(getProcAddress("glVertexPointervINTEL", glVertexPointervINTEL, false) == false
            || getProcAddress("glNormalPointervINTEL", glNormalPointervINTEL, false) == false
            || getProcAddress("glColorPointervINTEL", glColorPointervINTEL, false) == false
            || getProcAddress("glTexCoordPointervINTEL", glTexCoordPointervINTEL, false) == false
        ){
            GL_INTEL_parallel_arrays_supported = false;
        }
    }
    GL_HP_occlusion_test_supported = isExtensionSupported("GL_HP_occlusion_test", false);

    if(GL_EXT_pixel_transform_supported = isExtensionSupported("GL_EXT_pixel_transform", false)){
        if(getProcAddress("glPixelTransformParameteriEXT", glPixelTransformParameteriEXT, false) == false
            || getProcAddress("glPixelTransformParameterfEXT", glPixelTransformParameterfEXT, false) == false
            || getProcAddress("glPixelTransformParameterivEXT", glPixelTransformParameterivEXT, false) == false
            || getProcAddress("glPixelTransformParameterfvEXT", glPixelTransformParameterfvEXT, false) == false
            || getProcAddress("glGetPixelTransformParameterivEXT", glGetPixelTransformParameterivEXT, false) == false
            || getProcAddress("glGetPixelTransformParameterfvEXT", glGetPixelTransformParameterfvEXT, false) == false
        ){
            GL_EXT_pixel_transform_supported = false;
        }
    }
    GL_EXT_pixel_transform_color_table_supported = isExtensionSupported("GL_EXT_pixel_transform_color_table", false);
    GL_EXT_shared_texture_palette_supported = isExtensionSupported("GL_EXT_shared_texture_palette", false);
    GL_EXT_separate_specular_color_supported = isExtensionSupported("GL_EXT_separate_specular_color", false);

    if(GL_EXT_secondary_color_supported = isExtensionSupported("GL_EXT_secondary_color", false)){
        if(getProcAddress("glSecondaryColor3bEXT", glSecondaryColor3bEXT, false) == false
            || getProcAddress("glSecondaryColor3bvEXT", glSecondaryColor3bvEXT, false) == false
            || getProcAddress("glSecondaryColor3dEXT", glSecondaryColor3dEXT, false) == false
            || getProcAddress("glSecondaryColor3dvEXT", glSecondaryColor3dvEXT, false) == false
            || getProcAddress("glSecondaryColor3fEXT", glSecondaryColor3fEXT, false) == false
            || getProcAddress("glSecondaryColor3fvEXT", glSecondaryColor3fvEXT, false) == false
            || getProcAddress("glSecondaryColor3iEXT", glSecondaryColor3iEXT, false) == false
            || getProcAddress("glSecondaryColor3ivEXT", glSecondaryColor3ivEXT, false) == false
            || getProcAddress("glSecondaryColor3sEXT", glSecondaryColor3sEXT, false) == false
            || getProcAddress("glSecondaryColor3svEXT", glSecondaryColor3svEXT, false) == false
            || getProcAddress("glSecondaryColor3ubEXT", glSecondaryColor3ubEXT, false) == false
            || getProcAddress("glSecondaryColor3ubvEXT", glSecondaryColor3ubvEXT, false) == false
            || getProcAddress("glSecondaryColor3uiEXT", glSecondaryColor3uiEXT, false) == false
            || getProcAddress("glSecondaryColor3uivEXT", glSecondaryColor3uivEXT, false) == false
            || getProcAddress("glSecondaryColor3usEXT", glSecondaryColor3usEXT, false) == false
            || getProcAddress("glSecondaryColor3usvEXT", glSecondaryColor3usvEXT, false) == false
            || getProcAddress("glSecondaryColorPointerEXT", glSecondaryColorPointerEXT, false) == false
        ){
            GL_EXT_secondary_color_supported = false;
        }
    }

    if(GL_EXT_texture_perturb_normal_supported = isExtensionSupported("GL_EXT_texture_perturb_normal", false)){
        if(getProcAddress("glTextureNormalEXT", glTextureNormalEXT, false) == false
        ){
            GL_EXT_texture_perturb_normal_supported = false;
        }
    }

    if(GL_EXT_multi_draw_arrays_supported = isExtensionSupported("GL_EXT_multi_draw_arrays", false)){
        if(getProcAddress("glMultiDrawArraysEXT", glMultiDrawArraysEXT, false) == false
            || getProcAddress("glMultiDrawElementsEXT", glMultiDrawElementsEXT, false) == false
        ){
            GL_EXT_multi_draw_arrays_supported = false;
        }
    }

    if(GL_EXT_fog_coord_supported = isExtensionSupported("GL_EXT_fog_coord", false)){
        if(getProcAddress("glFogCoordfEXT", glFogCoordfEXT, false) == false
            || getProcAddress("glFogCoordfvEXT", glFogCoordfvEXT, false) == false
            || getProcAddress("glFogCoorddEXT", glFogCoorddEXT, false) == false
            || getProcAddress("glFogCoorddvEXT", glFogCoorddvEXT, false) == false
            || getProcAddress("glFogCoordPointerEXT", glFogCoordPointerEXT, false) == false
        ){
            GL_EXT_fog_coord_supported = false;
        }
    }
    GL_REND_screen_coordinates_supported = isExtensionSupported("GL_REND_screen_coordinates", false);

    if(GL_EXT_coordinate_frame_supported = isExtensionSupported("GL_EXT_coordinate_frame", false)){
        if(getProcAddress("glTangent3bEXT", glTangent3bEXT, false) == false
            || getProcAddress("glTangent3bvEXT", glTangent3bvEXT, false) == false
            || getProcAddress("glTangent3dEXT", glTangent3dEXT, false) == false
            || getProcAddress("glTangent3dvEXT", glTangent3dvEXT, false) == false
            || getProcAddress("glTangent3fEXT", glTangent3fEXT, false) == false
            || getProcAddress("glTangent3fvEXT", glTangent3fvEXT, false) == false
            || getProcAddress("glTangent3iEXT", glTangent3iEXT, false) == false
            || getProcAddress("glTangent3ivEXT", glTangent3ivEXT, false) == false
            || getProcAddress("glTangent3sEXT", glTangent3sEXT, false) == false
            || getProcAddress("glTangent3svEXT", glTangent3svEXT, false) == false
            || getProcAddress("glBinormal3bEXT", glBinormal3bEXT, false) == false
            || getProcAddress("glBinormal3bvEXT", glBinormal3bvEXT, false) == false
            || getProcAddress("glBinormal3dEXT", glBinormal3dEXT, false) == false
            || getProcAddress("glBinormal3dvEXT", glBinormal3dvEXT, false) == false
            || getProcAddress("glBinormal3fEXT", glBinormal3fEXT, false) == false
            || getProcAddress("glBinormal3fvEXT", glBinormal3fvEXT, false) == false
            || getProcAddress("glBinormal3iEXT", glBinormal3iEXT, false) == false
            || getProcAddress("glBinormal3ivEXT", glBinormal3ivEXT, false) == false
            || getProcAddress("glBinormal3sEXT", glBinormal3sEXT, false) == false
            || getProcAddress("glBinormal3svEXT", glBinormal3svEXT, false) == false
            || getProcAddress("glTangentPointerEXT", glTangentPointerEXT, false) == false
            || getProcAddress("glBinormalPointerEXT", glBinormalPointerEXT, false) == false
        ){
            GL_EXT_coordinate_frame_supported = false;
        }
    }
    GL_EXT_texture_env_combine_supported = isExtensionSupported("GL_EXT_texture_env_combine", false);
    GL_APPLE_specular_vector_supported = isExtensionSupported("GL_APPLE_specular_vector", false);
    GL_APPLE_transform_hint_supported = isExtensionSupported("GL_APPLE_transform_hint", false);
    GL_SGIX_fog_scale_supported = isExtensionSupported("GL_SGIX_fog_scale", false);

    if(GL_SUNX_constant_data_supported = isExtensionSupported("GL_SUNX_constant_data", false)){
        if(getProcAddress("glFinishTextureSUNX", glFinishTextureSUNX, false) == false
        ){
            GL_SUNX_constant_data_supported = false;
        }
    }

    if(GL_SUN_global_alpha_supported = isExtensionSupported("GL_SUN_global_alpha", false)){
        if(getProcAddress("glGlobalAlphaFactorbSUN", glGlobalAlphaFactorbSUN, false) == false
            || getProcAddress("glGlobalAlphaFactorsSUN", glGlobalAlphaFactorsSUN, false) == false
            || getProcAddress("glGlobalAlphaFactoriSUN", glGlobalAlphaFactoriSUN, false) == false
            || getProcAddress("glGlobalAlphaFactorfSUN", glGlobalAlphaFactorfSUN, false) == false
            || getProcAddress("glGlobalAlphaFactordSUN", glGlobalAlphaFactordSUN, false) == false
            || getProcAddress("glGlobalAlphaFactorubSUN", glGlobalAlphaFactorubSUN, false) == false
            || getProcAddress("glGlobalAlphaFactorusSUN", glGlobalAlphaFactorusSUN, false) == false
            || getProcAddress("glGlobalAlphaFactoruiSUN", glGlobalAlphaFactoruiSUN, false) == false
        ){
            GL_SUN_global_alpha_supported = false;
        }
    }

    if(GL_SUN_triangle_list_supported = isExtensionSupported("GL_SUN_triangle_list", false)){
        if(getProcAddress("glReplacementCodeuiSUN", glReplacementCodeuiSUN, false) == false
            || getProcAddress("glReplacementCodeusSUN", glReplacementCodeusSUN, false) == false
            || getProcAddress("glReplacementCodeubSUN", glReplacementCodeubSUN, false) == false
            || getProcAddress("glReplacementCodeuivSUN", glReplacementCodeuivSUN, false) == false
            || getProcAddress("glReplacementCodeusvSUN", glReplacementCodeusvSUN, false) == false
            || getProcAddress("glReplacementCodeubvSUN", glReplacementCodeubvSUN, false) == false
            || getProcAddress("glReplacementCodePointerSUN", glReplacementCodePointerSUN, false) == false
        ){
            GL_SUN_triangle_list_supported = false;
        }
    }

    if(GL_SUN_vertex_supported = isExtensionSupported("GL_SUN_vertex", false)){
        if(getProcAddress("glColor4ubVertex2fSUN", glColor4ubVertex2fSUN, false) == false
            || getProcAddress("glColor4ubVertex2fvSUN", glColor4ubVertex2fvSUN, false) == false
            || getProcAddress("glColor4ubVertex3fSUN", glColor4ubVertex3fSUN, false) == false
            || getProcAddress("glColor4ubVertex3fvSUN", glColor4ubVertex3fvSUN, false) == false
            || getProcAddress("glColor3fVertex3fSUN", glColor3fVertex3fSUN, false) == false
            || getProcAddress("glColor3fVertex3fvSUN", glColor3fVertex3fvSUN, false) == false
            || getProcAddress("glNormal3fVertex3fSUN", glNormal3fVertex3fSUN, false) == false
            || getProcAddress("glNormal3fVertex3fvSUN", glNormal3fVertex3fvSUN, false) == false
            || getProcAddress("glColor4fNormal3fVertex3fSUN", glColor4fNormal3fVertex3fSUN, false) == false
            || getProcAddress("glColor4fNormal3fVertex3fvSUN", glColor4fNormal3fVertex3fvSUN, false) == false
            || getProcAddress("glTexCoord2fVertex3fSUN", glTexCoord2fVertex3fSUN, false) == false
            || getProcAddress("glTexCoord2fVertex3fvSUN", glTexCoord2fVertex3fvSUN, false) == false
            || getProcAddress("glTexCoord4fVertex4fSUN", glTexCoord4fVertex4fSUN, false) == false
            || getProcAddress("glTexCoord4fVertex4fvSUN", glTexCoord4fVertex4fvSUN, false) == false
            || getProcAddress("glTexCoord2fColor4ubVertex3fSUN", glTexCoord2fColor4ubVertex3fSUN, false) == false
            || getProcAddress("glTexCoord2fColor4ubVertex3fvSUN", glTexCoord2fColor4ubVertex3fvSUN, false) == false
            || getProcAddress("glTexCoord2fColor3fVertex3fSUN", glTexCoord2fColor3fVertex3fSUN, false) == false
            || getProcAddress("glTexCoord2fColor3fVertex3fvSUN", glTexCoord2fColor3fVertex3fvSUN, false) == false
            || getProcAddress("glTexCoord2fNormal3fVertex3fSUN", glTexCoord2fNormal3fVertex3fSUN, false) == false
            || getProcAddress("glTexCoord2fNormal3fVertex3fvSUN", glTexCoord2fNormal3fVertex3fvSUN, false) == false
            || getProcAddress("glTexCoord2fColor4fNormal3fVertex3fSUN", glTexCoord2fColor4fNormal3fVertex3fSUN, false) == false
            || getProcAddress("glTexCoord2fColor4fNormal3fVertex3fvSUN", glTexCoord2fColor4fNormal3fVertex3fvSUN, false) == false
            || getProcAddress("glTexCoord4fColor4fNormal3fVertex4fSUN", glTexCoord4fColor4fNormal3fVertex4fSUN, false) == false
            || getProcAddress("glTexCoord4fColor4fNormal3fVertex4fvSUN", glTexCoord4fColor4fNormal3fVertex4fvSUN, false) == false
            || getProcAddress("glReplacementCodeuiVertex3fSUN", glReplacementCodeuiVertex3fSUN, false) == false
            || getProcAddress("glReplacementCodeuiVertex3fvSUN", glReplacementCodeuiVertex3fvSUN, false) == false
            || getProcAddress("glReplacementCodeuiColor4ubVertex3fSUN", glReplacementCodeuiColor4ubVertex3fSUN, false) == false
            || getProcAddress("glReplacementCodeuiColor4ubVertex3fvSUN", glReplacementCodeuiColor4ubVertex3fvSUN, false) == false
            || getProcAddress("glReplacementCodeuiColor3fVertex3fSUN", glReplacementCodeuiColor3fVertex3fSUN, false) == false
            || getProcAddress("glReplacementCodeuiColor3fVertex3fvSUN", glReplacementCodeuiColor3fVertex3fvSUN, false) == false
            || getProcAddress("glReplacementCodeuiNormal3fVertex3fSUN", glReplacementCodeuiNormal3fVertex3fSUN, false) == false
            || getProcAddress("glReplacementCodeuiNormal3fVertex3fvSUN", glReplacementCodeuiNormal3fVertex3fvSUN, false) == false
            || getProcAddress("glReplacementCodeuiColor4fNormal3fVertex3fSUN", glReplacementCodeuiColor4fNormal3fVertex3fSUN, false) == false
            || getProcAddress("glReplacementCodeuiColor4fNormal3fVertex3fvSUN", glReplacementCodeuiColor4fNormal3fVertex3fvSUN, false) == false
            || getProcAddress("glReplacementCodeuiTexCoord2fVertex3fSUN", glReplacementCodeuiTexCoord2fVertex3fSUN, false) == false
            || getProcAddress("glReplacementCodeuiTexCoord2fVertex3fvSUN", glReplacementCodeuiTexCoord2fVertex3fvSUN, false) == false
            || getProcAddress("glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN", glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN, false) == false
            || getProcAddress("glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN", glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN, false) == false
            || getProcAddress("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN", glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN, false) == false
            || getProcAddress("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN", glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN, false) == false
        ){
            GL_SUN_vertex_supported = false;
        }
    }

    if(GL_EXT_blend_func_separate_supported = isExtensionSupported("GL_EXT_blend_func_separate", false)){
        if(getProcAddress("glBlendFuncSeparateEXT", glBlendFuncSeparateEXT, false) == false
        ){
            GL_EXT_blend_func_separate_supported = false;
        }
    }

    if(GL_INGR_blend_func_separate_supported = isExtensionSupported("GL_INGR_blend_func_separate", false)){
        if(getProcAddress("glBlendFuncSeparateINGR", glBlendFuncSeparateINGR, false) == false
        ){
            GL_INGR_blend_func_separate_supported = false;
        }
    }
    GL_INGR_color_clamp_supported = isExtensionSupported("GL_INGR_color_clamp", false);
    GL_INGR_interlace_read_supported = isExtensionSupported("GL_INGR_interlace_read", false);
    GL_EXT_stencil_wrap_supported = isExtensionSupported("GL_EXT_stencil_wrap", false);
    GL_EXT_422_pixels_supported = isExtensionSupported("GL_EXT_422_pixels", false);
    GL_NV_texgen_reflection_supported = isExtensionSupported("GL_NV_texgen_reflection", false);
    GL_SUN_convolution_border_modes_supported = isExtensionSupported("GL_SUN_convolution_border_modes", false);
    GL_EXT_texture_env_add_supported = isExtensionSupported("GL_EXT_texture_env_add", false);
    GL_EXT_texture_lod_bias_supported = isExtensionSupported("GL_EXT_texture_lod_bias", false);
    GL_EXT_texture_filter_anisotropic_supported = isExtensionSupported("GL_EXT_texture_filter_anisotropic", false);

    if(GL_EXT_vertex_weighting_supported = isExtensionSupported("GL_EXT_vertex_weighting", false)){
        if(getProcAddress("glVertexWeightfEXT", glVertexWeightfEXT, false) == false
            || getProcAddress("glVertexWeightfvEXT", glVertexWeightfvEXT, false) == false
            || getProcAddress("glVertexWeightPointerEXT", glVertexWeightPointerEXT, false) == false
        ){
            GL_EXT_vertex_weighting_supported = false;
        }
    }
    GL_NV_light_max_exponent_supported = isExtensionSupported("GL_NV_light_max_exponent", false);

    if(GL_NV_vertex_array_range_supported = isExtensionSupported("GL_NV_vertex_array_range", false)){
        if(getProcAddress("glFlushVertexArrayRangeNV", glFlushVertexArrayRangeNV, false) == false
            || getProcAddress("glVertexArrayRangeNV", glVertexArrayRangeNV, false) == false
        ){
            GL_NV_vertex_array_range_supported = false;
        }
    }

    if(GL_NV_register_combiners_supported = isExtensionSupported("GL_NV_register_combiners", false)){
        if(getProcAddress("glCombinerParameterfvNV", glCombinerParameterfvNV, false) == false
            || getProcAddress("glCombinerParameterfNV", glCombinerParameterfNV, false) == false
            || getProcAddress("glCombinerParameterivNV", glCombinerParameterivNV, false) == false
            || getProcAddress("glCombinerParameteriNV", glCombinerParameteriNV, false) == false
            || getProcAddress("glCombinerInputNV", glCombinerInputNV, false) == false
            || getProcAddress("glCombinerOutputNV", glCombinerOutputNV, false) == false
            || getProcAddress("glFinalCombinerInputNV", glFinalCombinerInputNV, false) == false
            || getProcAddress("glGetCombinerInputParameterfvNV", glGetCombinerInputParameterfvNV, false) == false
            || getProcAddress("glGetCombinerInputParameterivNV", glGetCombinerInputParameterivNV, false) == false
            || getProcAddress("glGetCombinerOutputParameterfvNV", glGetCombinerOutputParameterfvNV, false) == false
            || getProcAddress("glGetCombinerOutputParameterivNV", glGetCombinerOutputParameterivNV, false) == false
            || getProcAddress("glGetFinalCombinerInputParameterfvNV", glGetFinalCombinerInputParameterfvNV, false) == false
            || getProcAddress("glGetFinalCombinerInputParameterivNV", glGetFinalCombinerInputParameterivNV, false) == false
        ){
            GL_NV_register_combiners_supported = false;
        }
    }
    GL_NV_fog_distance_supported = isExtensionSupported("GL_NV_fog_distance", false);
    GL_NV_texgen_emboss_supported = isExtensionSupported("GL_NV_texgen_emboss", false);
    GL_NV_blend_square_supported = isExtensionSupported("GL_NV_blend_square", false);
    GL_NV_texture_env_combine4_supported = isExtensionSupported("GL_NV_texture_env_combine4", false);

    if(GL_MESA_resize_buffers_supported = isExtensionSupported("GL_MESA_resize_buffers", false)){
        if(getProcAddress("glResizeBuffersMESA", glResizeBuffersMESA, false) == false
        ){
            GL_MESA_resize_buffers_supported = false;
        }
    }

    if(GL_MESA_window_pos_supported = isExtensionSupported("GL_MESA_window_pos", false)){
        if(getProcAddress("glWindowPos2dMESA", glWindowPos2dMESA, false) == false
            || getProcAddress("glWindowPos2dvMESA", glWindowPos2dvMESA, false) == false
            || getProcAddress("glWindowPos2fMESA", glWindowPos2fMESA, false) == false
            || getProcAddress("glWindowPos2fvMESA", glWindowPos2fvMESA, false) == false
            || getProcAddress("glWindowPos2iMESA", glWindowPos2iMESA, false) == false
            || getProcAddress("glWindowPos2ivMESA", glWindowPos2ivMESA, false) == false
            || getProcAddress("glWindowPos2sMESA", glWindowPos2sMESA, false) == false
            || getProcAddress("glWindowPos2svMESA", glWindowPos2svMESA, false) == false
            || getProcAddress("glWindowPos3dMESA", glWindowPos3dMESA, false) == false
            || getProcAddress("glWindowPos3dvMESA", glWindowPos3dvMESA, false) == false
            || getProcAddress("glWindowPos3fMESA", glWindowPos3fMESA, false) == false
            || getProcAddress("glWindowPos3fvMESA", glWindowPos3fvMESA, false) == false
            || getProcAddress("glWindowPos3iMESA", glWindowPos3iMESA, false) == false
            || getProcAddress("glWindowPos3ivMESA", glWindowPos3ivMESA, false) == false
            || getProcAddress("glWindowPos3sMESA", glWindowPos3sMESA, false) == false
            || getProcAddress("glWindowPos3svMESA", glWindowPos3svMESA, false) == false
            || getProcAddress("glWindowPos4dMESA", glWindowPos4dMESA, false) == false
            || getProcAddress("glWindowPos4dvMESA", glWindowPos4dvMESA, false) == false
            || getProcAddress("glWindowPos4fMESA", glWindowPos4fMESA, false) == false
            || getProcAddress("glWindowPos4fvMESA", glWindowPos4fvMESA, false) == false
            || getProcAddress("glWindowPos4iMESA", glWindowPos4iMESA, false) == false
            || getProcAddress("glWindowPos4ivMESA", glWindowPos4ivMESA, false) == false
            || getProcAddress("glWindowPos4sMESA", glWindowPos4sMESA, false) == false
            || getProcAddress("glWindowPos4svMESA", glWindowPos4svMESA, false) == false
        ){
            GL_MESA_window_pos_supported = false;
        }
    }
    GL_IBM_cull_vertex_supported = isExtensionSupported("GL_IBM_cull_vertex", false);

    if(GL_IBM_multimode_draw_arrays_supported = isExtensionSupported("GL_IBM_multimode_draw_arrays", false)){
        if(getProcAddress("glMultiModeDrawArraysIBM", glMultiModeDrawArraysIBM, false) == false
            || getProcAddress("glMultiModeDrawElementsIBM", glMultiModeDrawElementsIBM, false) == false
        ){
            GL_IBM_multimode_draw_arrays_supported = false;
        }
    }

    if(GL_IBM_vertex_array_lists_supported = isExtensionSupported("GL_IBM_vertex_array_lists", false)){
        if(getProcAddress("glColorPointerListIBM", glColorPointerListIBM, false) == false
            || getProcAddress("glSecondaryColorPointerListIBM", glSecondaryColorPointerListIBM, false) == false
            || getProcAddress("glEdgeFlagPointerListIBM", glEdgeFlagPointerListIBM, false) == false
            || getProcAddress("glFogCoordPointerListIBM", glFogCoordPointerListIBM, false) == false
            || getProcAddress("glIndexPointerListIBM", glIndexPointerListIBM, false) == false
            || getProcAddress("glNormalPointerListIBM", glNormalPointerListIBM, false) == false
            || getProcAddress("glTexCoordPointerListIBM", glTexCoordPointerListIBM, false) == false
            || getProcAddress("glVertexPointerListIBM", glVertexPointerListIBM, false) == false
        ){
            GL_IBM_vertex_array_lists_supported = false;
        }
    }
    GL_SGIX_subsample_supported = isExtensionSupported("GL_SGIX_subsample", false);
    GL_SGIX_ycrcba_supported = isExtensionSupported("GL_SGIX_ycrcba", false);
    GL_SGIX_ycrcb_subsample_supported = isExtensionSupported("GL_SGIX_ycrcb_subsample", false);
    GL_SGIX_depth_pass_instrument_supported = isExtensionSupported("GL_SGIX_depth_pass_instrument", false);
    GL_3DFX_texture_compression_FXT1_supported = isExtensionSupported("GL_3DFX_texture_compression_FXT1", false);
    GL_3DFX_multisample_supported = isExtensionSupported("GL_3DFX_multisample", false);

    if(GL_3DFX_tbuffer_supported = isExtensionSupported("GL_3DFX_tbuffer", false)){
        if(getProcAddress("glTbufferMask3DFX", glTbufferMask3DFX, false) == false
        ){
            GL_3DFX_tbuffer_supported = false;
        }
    }

    if(GL_EXT_multisample_supported = isExtensionSupported("GL_EXT_multisample", false)){
        if(getProcAddress("glSampleMaskEXT", glSampleMaskEXT, false) == false
            || getProcAddress("glSamplePatternEXT", glSamplePatternEXT, false) == false
        ){
            GL_EXT_multisample_supported = false;
        }
    }
    GL_SGIX_vertex_preclip_supported = isExtensionSupported("GL_SGIX_vertex_preclip", false);
    GL_SGIX_convolution_accuracy_supported = isExtensionSupported("GL_SGIX_convolution_accuracy", false);
    GL_SGIX_resample_supported = isExtensionSupported("GL_SGIX_resample", false);
    GL_SGIS_point_line_texgen_supported = isExtensionSupported("GL_SGIS_point_line_texgen", false);

    if(GL_SGIS_texture_color_mask_supported = isExtensionSupported("GL_SGIS_texture_color_mask", false)){
        if(getProcAddress("glTextureColorMaskSGIS", glTextureColorMaskSGIS, false) == false
        ){
            GL_SGIS_texture_color_mask_supported = false;
        }
    }

    if(GL_SGIX_igloo_interface_supported = isExtensionSupported("GL_SGIX_igloo_interface", false)){
        if(getProcAddress("glIglooInterfaceSGIX", glIglooInterfaceSGIX, false) == false
        ){
            GL_SGIX_igloo_interface_supported = false;
        }
    }
    GL_EXT_texture_env_dot3_supported = isExtensionSupported("GL_EXT_texture_env_dot3", false);
    GL_ATI_texture_mirror_once_supported = isExtensionSupported("GL_ATI_texture_mirror_once", false);

    if(GL_NV_fence_supported = isExtensionSupported("GL_NV_fence", false)){
        if(getProcAddress("glDeleteFencesNV", glDeleteFencesNV, false) == false
            || getProcAddress("glGenFencesNV", glGenFencesNV, false) == false
            || getProcAddress("glIsFenceNV", glIsFenceNV, false) == false
            || getProcAddress("glTestFenceNV", glTestFenceNV, false) == false
            || getProcAddress("glGetFenceivNV", glGetFenceivNV, false) == false
            || getProcAddress("glFinishFenceNV", glFinishFenceNV, false) == false
            || getProcAddress("glSetFenceNV", glSetFenceNV, false) == false
        ){
            GL_NV_fence_supported = false;
        }
    }

    if(GL_NV_evaluators_supported = isExtensionSupported("GL_NV_evaluators", false)){
        if(getProcAddress("glMapControlPointsNV", glMapControlPointsNV, false) == false
            || getProcAddress("glMapParameterivNV", glMapParameterivNV, false) == false
            || getProcAddress("glMapParameterfvNV", glMapParameterfvNV, false) == false
            || getProcAddress("glGetMapControlPointsNV", glGetMapControlPointsNV, false) == false
            || getProcAddress("glGetMapParameterivNV", glGetMapParameterivNV, false) == false
            || getProcAddress("glGetMapParameterfvNV", glGetMapParameterfvNV, false) == false
            || getProcAddress("glGetMapAttribParameterivNV", glGetMapAttribParameterivNV, false) == false
            || getProcAddress("glGetMapAttribParameterfvNV", glGetMapAttribParameterfvNV, false) == false
            || getProcAddress("glEvalMapsNV", glEvalMapsNV, false) == false
        ){
            GL_NV_evaluators_supported = false;
        }
    }
    GL_NV_packed_depth_stencil_supported = isExtensionSupported("GL_NV_packed_depth_stencil", false);

    if(GL_NV_register_combiners2_supported = isExtensionSupported("GL_NV_register_combiners2", false)){
        if(getProcAddress("glCombinerStageParameterfvNV", glCombinerStageParameterfvNV, false) == false
            || getProcAddress("glGetCombinerStageParameterfvNV", glGetCombinerStageParameterfvNV, false) == false
        ){
            GL_NV_register_combiners2_supported = false;
        }
    }
    GL_NV_texture_compression_vtc_supported = isExtensionSupported("GL_NV_texture_compression_vtc", false);
    GL_NV_texture_rectangle_supported = isExtensionSupported("GL_NV_texture_rectangle", false);
    GL_NV_texture_shader_supported = isExtensionSupported("GL_NV_texture_shader", false);
    GL_NV_texture_shader2_supported = isExtensionSupported("GL_NV_texture_shader2", false);
    GL_NV_vertex_array_range2_supported = isExtensionSupported("GL_NV_vertex_array_range2", false);

    if(GL_NV_vertex_program_supported = isExtensionSupported("GL_NV_vertex_program", false)){
        if(getProcAddress("glAreProgramsResidentNV", glAreProgramsResidentNV, false) == false
            || getProcAddress("glBindProgramNV", glBindProgramNV, false) == false
            || getProcAddress("glDeleteProgramsNV", glDeleteProgramsNV, false) == false
            || getProcAddress("glExecuteProgramNV", glExecuteProgramNV, false) == false
            || getProcAddress("glGenProgramsNV", glGenProgramsNV, false) == false
            || getProcAddress("glGetProgramParameterdvNV", glGetProgramParameterdvNV, false) == false
            || getProcAddress("glGetProgramParameterfvNV", glGetProgramParameterfvNV, false) == false
            || getProcAddress("glGetProgramivNV", glGetProgramivNV, false) == false
            || getProcAddress("glGetProgramStringNV", glGetProgramStringNV, false) == false
            || getProcAddress("glGetTrackMatrixivNV", glGetTrackMatrixivNV, false) == false
            || getProcAddress("glGetVertexAttribdvNV", glGetVertexAttribdvNV, false) == false
            || getProcAddress("glGetVertexAttribfvNV", glGetVertexAttribfvNV, false) == false
            || getProcAddress("glGetVertexAttribivNV", glGetVertexAttribivNV, false) == false
            || getProcAddress("glGetVertexAttribPointervNV", glGetVertexAttribPointervNV, false) == false
            || getProcAddress("glIsProgramNV", glIsProgramNV, false) == false
            || getProcAddress("glLoadProgramNV", glLoadProgramNV, false) == false
            || getProcAddress("glProgramParameter4dNV", glProgramParameter4dNV, false) == false
            || getProcAddress("glProgramParameter4dvNV", glProgramParameter4dvNV, false) == false
            || getProcAddress("glProgramParameter4fNV", glProgramParameter4fNV, false) == false
            || getProcAddress("glProgramParameter4fvNV", glProgramParameter4fvNV, false) == false
            || getProcAddress("glProgramParameters4dvNV", glProgramParameters4dvNV, false) == false
            || getProcAddress("glProgramParameters4fvNV", glProgramParameters4fvNV, false) == false
            || getProcAddress("glRequestResidentProgramsNV", glRequestResidentProgramsNV, false) == false
            || getProcAddress("glTrackMatrixNV", glTrackMatrixNV, false) == false
            || getProcAddress("glVertexAttribPointerNV", glVertexAttribPointerNV, false) == false
            || getProcAddress("glVertexAttrib1dNV", glVertexAttrib1dNV, false) == false
            || getProcAddress("glVertexAttrib1dvNV", glVertexAttrib1dvNV, false) == false
            || getProcAddress("glVertexAttrib1fNV", glVertexAttrib1fNV, false) == false
            || getProcAddress("glVertexAttrib1fvNV", glVertexAttrib1fvNV, false) == false
            || getProcAddress("glVertexAttrib1sNV", glVertexAttrib1sNV, false) == false
            || getProcAddress("glVertexAttrib1svNV", glVertexAttrib1svNV, false) == false
            || getProcAddress("glVertexAttrib2dNV", glVertexAttrib2dNV, false) == false
            || getProcAddress("glVertexAttrib2dvNV", glVertexAttrib2dvNV, false) == false
            || getProcAddress("glVertexAttrib2fNV", glVertexAttrib2fNV, false) == false
            || getProcAddress("glVertexAttrib2fvNV", glVertexAttrib2fvNV, false) == false
            || getProcAddress("glVertexAttrib2sNV", glVertexAttrib2sNV, false) == false
            || getProcAddress("glVertexAttrib2svNV", glVertexAttrib2svNV, false) == false
            || getProcAddress("glVertexAttrib3dNV", glVertexAttrib3dNV, false) == false
            || getProcAddress("glVertexAttrib3dvNV", glVertexAttrib3dvNV, false) == false
            || getProcAddress("glVertexAttrib3fNV", glVertexAttrib3fNV, false) == false
            || getProcAddress("glVertexAttrib3fvNV", glVertexAttrib3fvNV, false) == false
            || getProcAddress("glVertexAttrib3sNV", glVertexAttrib3sNV, false) == false
            || getProcAddress("glVertexAttrib3svNV", glVertexAttrib3svNV, false) == false
            || getProcAddress("glVertexAttrib4dNV", glVertexAttrib4dNV, false) == false
            || getProcAddress("glVertexAttrib4dvNV", glVertexAttrib4dvNV, false) == false
            || getProcAddress("glVertexAttrib4fNV", glVertexAttrib4fNV, false) == false
            || getProcAddress("glVertexAttrib4fvNV", glVertexAttrib4fvNV, false) == false
            || getProcAddress("glVertexAttrib4sNV", glVertexAttrib4sNV, false) == false
            || getProcAddress("glVertexAttrib4svNV", glVertexAttrib4svNV, false) == false
            || getProcAddress("glVertexAttrib4ubNV", glVertexAttrib4ubNV, false) == false
            || getProcAddress("glVertexAttrib4ubvNV", glVertexAttrib4ubvNV, false) == false
            || getProcAddress("glVertexAttribs1dvNV", glVertexAttribs1dvNV, false) == false
            || getProcAddress("glVertexAttribs1fvNV", glVertexAttribs1fvNV, false) == false
            || getProcAddress("glVertexAttribs1svNV", glVertexAttribs1svNV, false) == false
            || getProcAddress("glVertexAttribs2dvNV", glVertexAttribs2dvNV, false) == false
            || getProcAddress("glVertexAttribs2fvNV", glVertexAttribs2fvNV, false) == false
            || getProcAddress("glVertexAttribs2svNV", glVertexAttribs2svNV, false) == false
            || getProcAddress("glVertexAttribs3dvNV", glVertexAttribs3dvNV, false) == false
            || getProcAddress("glVertexAttribs3fvNV", glVertexAttribs3fvNV, false) == false
            || getProcAddress("glVertexAttribs3svNV", glVertexAttribs3svNV, false) == false
            || getProcAddress("glVertexAttribs4dvNV", glVertexAttribs4dvNV, false) == false
            || getProcAddress("glVertexAttribs4fvNV", glVertexAttribs4fvNV, false) == false
            || getProcAddress("glVertexAttribs4svNV", glVertexAttribs4svNV, false) == false
            || getProcAddress("glVertexAttribs4ubvNV", glVertexAttribs4ubvNV, false) == false
        ){
            GL_NV_vertex_program_supported = false;
        }
    }
    GL_SGIX_texture_coordinate_clamp_supported = isExtensionSupported("GL_SGIX_texture_coordinate_clamp", false);
    GL_SGIX_scalebias_hint_supported = isExtensionSupported("GL_SGIX_scalebias_hint", false);
    GL_OML_interlace_supported = isExtensionSupported("GL_OML_interlace", false);
    GL_OML_subsample_supported = isExtensionSupported("GL_OML_subsample", false);
    GL_OML_resample_supported = isExtensionSupported("GL_OML_resample", false);
    GL_NV_copy_depth_to_color_supported = isExtensionSupported("GL_NV_copy_depth_to_color", false);

    if(GL_ATI_envmap_bumpmap_supported = isExtensionSupported("GL_ATI_envmap_bumpmap", false)){
        if(getProcAddress("glTexBumpParameterivATI", glTexBumpParameterivATI, false) == false
            || getProcAddress("glTexBumpParameterfvATI", glTexBumpParameterfvATI, false) == false
            || getProcAddress("glGetTexBumpParameterivATI", glGetTexBumpParameterivATI, false) == false
            || getProcAddress("glGetTexBumpParameterfvATI", glGetTexBumpParameterfvATI, false) == false
        ){
            GL_ATI_envmap_bumpmap_supported = false;
        }
    }

    if(GL_ATI_fragment_shader_supported = isExtensionSupported("GL_ATI_fragment_shader", false)){
        if(getProcAddress("glGenFragmentShadersATI", glGenFragmentShadersATI, false) == false
            || getProcAddress("glBindFragmentShaderATI", glBindFragmentShaderATI, false) == false
            || getProcAddress("glDeleteFragmentShaderATI", glDeleteFragmentShaderATI, false) == false
            || getProcAddress("glBeginFragmentShaderATI", glBeginFragmentShaderATI, false) == false
            || getProcAddress("glEndFragmentShaderATI", glEndFragmentShaderATI, false) == false
            || getProcAddress("glPassTexCoordATI", glPassTexCoordATI, false) == false
            || getProcAddress("glSampleMapATI", glSampleMapATI, false) == false
            || getProcAddress("glColorFragmentOp1ATI", glColorFragmentOp1ATI, false) == false
            || getProcAddress("glColorFragmentOp2ATI", glColorFragmentOp2ATI, false) == false
            || getProcAddress("glColorFragmentOp3ATI", glColorFragmentOp3ATI, false) == false
            || getProcAddress("glAlphaFragmentOp1ATI", glAlphaFragmentOp1ATI, false) == false
            || getProcAddress("glAlphaFragmentOp2ATI", glAlphaFragmentOp2ATI, false) == false
            || getProcAddress("glAlphaFragmentOp3ATI", glAlphaFragmentOp3ATI, false) == false
            || getProcAddress("glSetFragmentShaderConstantATI", glSetFragmentShaderConstantATI, false) == false
        ){
            GL_ATI_fragment_shader_supported = false;
        }
    }

    if(GL_ATI_pn_triangles_supported = isExtensionSupported("GL_ATI_pn_triangles", false)){
        if(getProcAddress("glPNTrianglesiATI", glPNTrianglesiATI, false) == false
            || getProcAddress("glPNTrianglesfATI", glPNTrianglesfATI, false) == false
        ){
            GL_ATI_pn_triangles_supported = false;
        }
    }

    if(GL_ATI_vertex_array_object_supported = isExtensionSupported("GL_ATI_vertex_array_object", false)){
        if(getProcAddress("glNewObjectBufferATI", glNewObjectBufferATI, false) == false
            || getProcAddress("glIsObjectBufferATI", glIsObjectBufferATI, false) == false
            || getProcAddress("glUpdateObjectBufferATI", glUpdateObjectBufferATI, false) == false
            || getProcAddress("glGetObjectBufferfvATI", glGetObjectBufferfvATI, false) == false
            || getProcAddress("glGetObjectBufferivATI", glGetObjectBufferivATI, false) == false
            || getProcAddress("glFreeObjectBufferATI", glFreeObjectBufferATI, false) == false
            || getProcAddress("glArrayObjectATI", glArrayObjectATI, false) == false
            || getProcAddress("glGetArrayObjectfvATI", glGetArrayObjectfvATI, false) == false
            || getProcAddress("glGetArrayObjectivATI", glGetArrayObjectivATI, false) == false
            || getProcAddress("glVariantArrayObjectATI", glVariantArrayObjectATI, false) == false
            || getProcAddress("glGetVariantArrayObjectfvATI", glGetVariantArrayObjectfvATI, false) == false
            || getProcAddress("glGetVariantArrayObjectivATI", glGetVariantArrayObjectivATI, false) == false
        ){
            GL_ATI_vertex_array_object_supported = false;
        }
    }

    if(GL_EXT_vertex_shader_supported = isExtensionSupported("GL_EXT_vertex_shader", false)){
        if(getProcAddress("glBeginVertexShaderEXT", glBeginVertexShaderEXT, false) == false
            || getProcAddress("glEndVertexShaderEXT", glEndVertexShaderEXT, false) == false
            || getProcAddress("glBindVertexShaderEXT", glBindVertexShaderEXT, false) == false
            || getProcAddress("glGenVertexShadersEXT", glGenVertexShadersEXT, false) == false
            || getProcAddress("glDeleteVertexShaderEXT", glDeleteVertexShaderEXT, false) == false
            || getProcAddress("glShaderOp1EXT", glShaderOp1EXT, false) == false
            || getProcAddress("glShaderOp2EXT", glShaderOp2EXT, false) == false
            || getProcAddress("glShaderOp3EXT", glShaderOp3EXT, false) == false
            || getProcAddress("glSwizzleEXT", glSwizzleEXT, false) == false
            || getProcAddress("glWriteMaskEXT", glWriteMaskEXT, false) == false
            || getProcAddress("glInsertComponentEXT", glInsertComponentEXT, false) == false
            || getProcAddress("glExtractComponentEXT", glExtractComponentEXT, false) == false
            || getProcAddress("glGenSymbolsEXT", glGenSymbolsEXT, false) == false
            || getProcAddress("glSetInvariantEXT", glSetInvariantEXT, false) == false
            || getProcAddress("glSetLocalConstantEXT", glSetLocalConstantEXT, false) == false
            || getProcAddress("glVariantbvEXT", glVariantbvEXT, false) == false
            || getProcAddress("glVariantsvEXT", glVariantsvEXT, false) == false
            || getProcAddress("glVariantivEXT", glVariantivEXT, false) == false
            || getProcAddress("glVariantfvEXT", glVariantfvEXT, false) == false
            || getProcAddress("glVariantdvEXT", glVariantdvEXT, false) == false
            || getProcAddress("glVariantubvEXT", glVariantubvEXT, false) == false
            || getProcAddress("glVariantusvEXT", glVariantusvEXT, false) == false
            || getProcAddress("glVariantuivEXT", glVariantuivEXT, false) == false
            || getProcAddress("glVariantPointerEXT", glVariantPointerEXT, false) == false
            || getProcAddress("glEnableVariantClientStateEXT", glEnableVariantClientStateEXT, false) == false
            || getProcAddress("glDisableVariantClientStateEXT", glDisableVariantClientStateEXT, false) == false
            || getProcAddress("glBindLightParameterEXT", glBindLightParameterEXT, false) == false
            || getProcAddress("glBindMaterialParameterEXT", glBindMaterialParameterEXT, false) == false
            || getProcAddress("glBindTexGenParameterEXT", glBindTexGenParameterEXT, false) == false
            || getProcAddress("glBindTextureUnitParameterEXT", glBindTextureUnitParameterEXT, false) == false
            || getProcAddress("glBindParameterEXT", glBindParameterEXT, false) == false
            || getProcAddress("glIsVariantEnabledEXT", glIsVariantEnabledEXT, false) == false
            || getProcAddress("glGetVariantBooleanvEXT", glGetVariantBooleanvEXT, false) == false
            || getProcAddress("glGetVariantIntegervEXT", glGetVariantIntegervEXT, false) == false
            || getProcAddress("glGetVariantFloatvEXT", glGetVariantFloatvEXT, false) == false
            || getProcAddress("glGetVariantPointervEXT", glGetVariantPointervEXT, false) == false
            || getProcAddress("glGetInvariantBooleanvEXT", glGetInvariantBooleanvEXT, false) == false
            || getProcAddress("glGetInvariantIntegervEXT", glGetInvariantIntegervEXT, false) == false
            || getProcAddress("glGetInvariantFloatvEXT", glGetInvariantFloatvEXT, false) == false
            || getProcAddress("glGetLocalConstantBooleanvEXT", glGetLocalConstantBooleanvEXT, false) == false
            || getProcAddress("glGetLocalConstantIntegervEXT", glGetLocalConstantIntegervEXT, false) == false
            || getProcAddress("glGetLocalConstantFloatvEXT", glGetLocalConstantFloatvEXT, false) == false
        ){
            GL_EXT_vertex_shader_supported = false;
        }
    }

    if(GL_ATI_vertex_streams_supported = isExtensionSupported("GL_ATI_vertex_streams", false)){
        if(getProcAddress("glVertexStream1sATI", glVertexStream1sATI, false) == false
            || getProcAddress("glVertexStream1svATI", glVertexStream1svATI, false) == false
            || getProcAddress("glVertexStream1iATI", glVertexStream1iATI, false) == false
            || getProcAddress("glVertexStream1ivATI", glVertexStream1ivATI, false) == false
            || getProcAddress("glVertexStream1fATI", glVertexStream1fATI, false) == false
            || getProcAddress("glVertexStream1fvATI", glVertexStream1fvATI, false) == false
            || getProcAddress("glVertexStream1dATI", glVertexStream1dATI, false) == false
            || getProcAddress("glVertexStream1dvATI", glVertexStream1dvATI, false) == false
            || getProcAddress("glVertexStream2sATI", glVertexStream2sATI, false) == false
            || getProcAddress("glVertexStream2svATI", glVertexStream2svATI, false) == false
            || getProcAddress("glVertexStream2iATI", glVertexStream2iATI, false) == false
            || getProcAddress("glVertexStream2ivATI", glVertexStream2ivATI, false) == false
            || getProcAddress("glVertexStream2fATI", glVertexStream2fATI, false) == false
            || getProcAddress("glVertexStream2fvATI", glVertexStream2fvATI, false) == false
            || getProcAddress("glVertexStream2dATI", glVertexStream2dATI, false) == false
            || getProcAddress("glVertexStream2dvATI", glVertexStream2dvATI, false) == false
            || getProcAddress("glVertexStream3sATI", glVertexStream3sATI, false) == false
            || getProcAddress("glVertexStream3svATI", glVertexStream3svATI, false) == false
            || getProcAddress("glVertexStream3iATI", glVertexStream3iATI, false) == false
            || getProcAddress("glVertexStream3ivATI", glVertexStream3ivATI, false) == false
            || getProcAddress("glVertexStream3fATI", glVertexStream3fATI, false) == false
            || getProcAddress("glVertexStream3fvATI", glVertexStream3fvATI, false) == false
            || getProcAddress("glVertexStream3dATI", glVertexStream3dATI, false) == false
            || getProcAddress("glVertexStream3dvATI", glVertexStream3dvATI, false) == false
            || getProcAddress("glVertexStream4sATI", glVertexStream4sATI, false) == false
            || getProcAddress("glVertexStream4svATI", glVertexStream4svATI, false) == false
            || getProcAddress("glVertexStream4iATI", glVertexStream4iATI, false) == false
            || getProcAddress("glVertexStream4ivATI", glVertexStream4ivATI, false) == false
            || getProcAddress("glVertexStream4fATI", glVertexStream4fATI, false) == false
            || getProcAddress("glVertexStream4fvATI", glVertexStream4fvATI, false) == false
            || getProcAddress("glVertexStream4dATI", glVertexStream4dATI, false) == false
            || getProcAddress("glVertexStream4dvATI", glVertexStream4dvATI, false) == false
            || getProcAddress("glNormalStream3bATI", glNormalStream3bATI, false) == false
            || getProcAddress("glNormalStream3bvATI", glNormalStream3bvATI, false) == false
            || getProcAddress("glNormalStream3sATI", glNormalStream3sATI, false) == false
            || getProcAddress("glNormalStream3svATI", glNormalStream3svATI, false) == false
            || getProcAddress("glNormalStream3iATI", glNormalStream3iATI, false) == false
            || getProcAddress("glNormalStream3ivATI", glNormalStream3ivATI, false) == false
            || getProcAddress("glNormalStream3fATI", glNormalStream3fATI, false) == false
            || getProcAddress("glNormalStream3fvATI", glNormalStream3fvATI, false) == false
            || getProcAddress("glNormalStream3dATI", glNormalStream3dATI, false) == false
            || getProcAddress("glNormalStream3dvATI", glNormalStream3dvATI, false) == false
            || getProcAddress("glClientActiveVertexStreamATI", glClientActiveVertexStreamATI, false) == false
            || getProcAddress("glVertexBlendEnviATI", glVertexBlendEnviATI, false) == false
            || getProcAddress("glVertexBlendEnvfATI", glVertexBlendEnvfATI, false) == false
        ){
            GL_ATI_vertex_streams_supported = false;
        }
    }

    if(GL_ATI_element_array_supported = isExtensionSupported("GL_ATI_element_array", false)){
        if(getProcAddress("glElementPointerATI", glElementPointerATI, false) == false
            || getProcAddress("glDrawElementArrayATI", glDrawElementArrayATI, false) == false
            || getProcAddress("glDrawRangeElementArrayATI", glDrawRangeElementArrayATI, false) == false
        ){
            GL_ATI_element_array_supported = false;
        }
    }

    if(GL_SUN_mesh_array_supported = isExtensionSupported("GL_SUN_mesh_array", false)){
        if(getProcAddress("glDrawMeshArraysSUN", glDrawMeshArraysSUN, false) == false
        ){
            GL_SUN_mesh_array_supported = false;
        }
    }
    GL_SUN_slice_accum_supported = isExtensionSupported("GL_SUN_slice_accum", false);
    GL_NV_multisample_filter_hint_supported = isExtensionSupported("GL_NV_multisample_filter_hint", false);
    GL_NV_depth_clamp_supported = isExtensionSupported("GL_NV_depth_clamp", false);

    if(GL_NV_occlusion_query_supported = isExtensionSupported("GL_NV_occlusion_query", false)){
        if(getProcAddress("glGenOcclusionQueriesNV", glGenOcclusionQueriesNV, false) == false
            || getProcAddress("glDeleteOcclusionQueriesNV", glDeleteOcclusionQueriesNV, false) == false
            || getProcAddress("glIsOcclusionQueryNV", glIsOcclusionQueryNV, false) == false
            || getProcAddress("glBeginOcclusionQueryNV", glBeginOcclusionQueryNV, false) == false
            || getProcAddress("glEndOcclusionQueryNV", glEndOcclusionQueryNV, false) == false
            || getProcAddress("glGetOcclusionQueryivNV", glGetOcclusionQueryivNV, false) == false
            || getProcAddress("glGetOcclusionQueryuivNV", glGetOcclusionQueryuivNV, false) == false
        ){
            GL_NV_occlusion_query_supported = false;
        }
    }

    if(GL_NV_point_sprite_supported = isExtensionSupported("GL_NV_point_sprite", false)){
        if(getProcAddress("glPointParameteriNV", glPointParameteriNV, false) == false
            || getProcAddress("glPointParameterivNV", glPointParameterivNV, false) == false
        ){
            GL_NV_point_sprite_supported = false;
        }
    }
    GL_NV_texture_shader3_supported = isExtensionSupported("GL_NV_texture_shader3", false);
    GL_NV_vertex_program1_1_supported = isExtensionSupported("GL_NV_vertex_program1_1", false);
    GL_EXT_shadow_funcs_supported = isExtensionSupported("GL_EXT_shadow_funcs", false);

    if(GL_EXT_stencil_two_side_supported = isExtensionSupported("GL_EXT_stencil_two_side", false)){
        if(getProcAddress("glActiveStencilFaceEXT", glActiveStencilFaceEXT, false) == false
        ){
            GL_EXT_stencil_two_side_supported = false;
        }
    }
    GL_ATI_text_fragment_shader_supported = isExtensionSupported("GL_ATI_text_fragment_shader", false);
    GL_APPLE_client_storage_supported = isExtensionSupported("GL_APPLE_client_storage", false);

    if(GL_APPLE_element_array_supported = isExtensionSupported("GL_APPLE_element_array", false)){
        if(getProcAddress("glElementPointerAPPLE", glElementPointerAPPLE, false) == false
            || getProcAddress("glDrawElementArrayAPPLE", glDrawElementArrayAPPLE, false) == false
            || getProcAddress("glDrawRangeElementArrayAPPLE", glDrawRangeElementArrayAPPLE, false) == false
            || getProcAddress("glMultiDrawElementArrayAPPLE", glMultiDrawElementArrayAPPLE, false) == false
            || getProcAddress("glMultiDrawRangeElementArrayAPPLE", glMultiDrawRangeElementArrayAPPLE, false) == false
        ){
            GL_APPLE_element_array_supported = false;
        }
    }

    if(GL_APPLE_fence_supported = isExtensionSupported("GL_APPLE_fence", false)){
        if(getProcAddress("glGenFencesAPPLE", glGenFencesAPPLE, false) == false
            || getProcAddress("glDeleteFencesAPPLE", glDeleteFencesAPPLE, false) == false
            || getProcAddress("glSetFenceAPPLE", glSetFenceAPPLE, false) == false
            || getProcAddress("glIsFenceAPPLE", glIsFenceAPPLE, false) == false
            || getProcAddress("glTestFenceAPPLE", glTestFenceAPPLE, false) == false
            || getProcAddress("glFinishFenceAPPLE", glFinishFenceAPPLE, false) == false
            || getProcAddress("glTestObjectAPPLE", glTestObjectAPPLE, false) == false
            || getProcAddress("glFinishObjectAPPLE", glFinishObjectAPPLE, false) == false
        ){
            GL_APPLE_fence_supported = false;
        }
    }

    if(GL_APPLE_vertex_array_object_supported = isExtensionSupported("GL_APPLE_vertex_array_object", false)){
        if(getProcAddress("glBindVertexArrayAPPLE", glBindVertexArrayAPPLE, false) == false
            || getProcAddress("glDeleteVertexArraysAPPLE", glDeleteVertexArraysAPPLE, false) == false
            || getProcAddress("glGenVertexArraysAPPLE", glGenVertexArraysAPPLE, false) == false
            || getProcAddress("glIsVertexArrayAPPLE", glIsVertexArrayAPPLE, false) == false
        ){
            GL_APPLE_vertex_array_object_supported = false;
        }
    }

    if(GL_APPLE_vertex_array_range_supported = isExtensionSupported("GL_APPLE_vertex_array_range", false)){
        if(getProcAddress("glVertexArrayRangeAPPLE", glVertexArrayRangeAPPLE, false) == false
            || getProcAddress("glFlushVertexArrayRangeAPPLE", glFlushVertexArrayRangeAPPLE, false) == false
            || getProcAddress("glVertexArrayParameteriAPPLE", glVertexArrayParameteriAPPLE, false) == false
        ){
            GL_APPLE_vertex_array_range_supported = false;
        }
    }
    GL_APPLE_ycbcr_422_supported = isExtensionSupported("GL_APPLE_ycbcr_422", false);
    GL_S3_s3tc_supported = isExtensionSupported("GL_S3_s3tc", false);

    if(GL_ATI_draw_buffers_supported = isExtensionSupported("GL_ATI_draw_buffers", false)){
        if(getProcAddress("glDrawBuffersATI", glDrawBuffersATI, false) == false
        ){
            GL_ATI_draw_buffers_supported = false;
        }
    }
    GL_ATI_pixel_format_float_supported = isExtensionSupported("GL_ATI_pixel_format_float", false);
    GL_ATI_texture_env_combine3_supported = isExtensionSupported("GL_ATI_texture_env_combine3", false);
    GL_ATI_texture_float_supported = isExtensionSupported("GL_ATI_texture_float", false);
    GL_NV_float_buffer_supported = isExtensionSupported("GL_NV_float_buffer", false);

    if(GL_NV_fragment_program_supported = isExtensionSupported("GL_NV_fragment_program", false)){
        if(getProcAddress("glProgramNamedParameter4fNV", glProgramNamedParameter4fNV, false) == false
            || getProcAddress("glProgramNamedParameter4dNV", glProgramNamedParameter4dNV, false) == false
            || getProcAddress("glProgramNamedParameter4fvNV", glProgramNamedParameter4fvNV, false) == false
            || getProcAddress("glProgramNamedParameter4dvNV", glProgramNamedParameter4dvNV, false) == false
            || getProcAddress("glGetProgramNamedParameterfvNV", glGetProgramNamedParameterfvNV, false) == false
            || getProcAddress("glGetProgramNamedParameterdvNV", glGetProgramNamedParameterdvNV, false) == false
        ){
            GL_NV_fragment_program_supported = false;
        }
    }

    if(GL_NV_half_float_supported = isExtensionSupported("GL_NV_half_float", false)){
        if(getProcAddress("glVertex2hNV", glVertex2hNV, false) == false
            || getProcAddress("glVertex2hvNV", glVertex2hvNV, false) == false
            || getProcAddress("glVertex3hNV", glVertex3hNV, false) == false
            || getProcAddress("glVertex3hvNV", glVertex3hvNV, false) == false
            || getProcAddress("glVertex4hNV", glVertex4hNV, false) == false
            || getProcAddress("glVertex4hvNV", glVertex4hvNV, false) == false
            || getProcAddress("glNormal3hNV", glNormal3hNV, false) == false
            || getProcAddress("glNormal3hvNV", glNormal3hvNV, false) == false
            || getProcAddress("glColor3hNV", glColor3hNV, false) == false
            || getProcAddress("glColor3hvNV", glColor3hvNV, false) == false
            || getProcAddress("glColor4hNV", glColor4hNV, false) == false
            || getProcAddress("glColor4hvNV", glColor4hvNV, false) == false
            || getProcAddress("glTexCoord1hNV", glTexCoord1hNV, false) == false
            || getProcAddress("glTexCoord1hvNV", glTexCoord1hvNV, false) == false
            || getProcAddress("glTexCoord2hNV", glTexCoord2hNV, false) == false
            || getProcAddress("glTexCoord2hvNV", glTexCoord2hvNV, false) == false
            || getProcAddress("glTexCoord3hNV", glTexCoord3hNV, false) == false
            || getProcAddress("glTexCoord3hvNV", glTexCoord3hvNV, false) == false
            || getProcAddress("glTexCoord4hNV", glTexCoord4hNV, false) == false
            || getProcAddress("glTexCoord4hvNV", glTexCoord4hvNV, false) == false
            || getProcAddress("glMultiTexCoord1hNV", glMultiTexCoord1hNV, false) == false
            || getProcAddress("glMultiTexCoord1hvNV", glMultiTexCoord1hvNV, false) == false
            || getProcAddress("glMultiTexCoord2hNV", glMultiTexCoord2hNV, false) == false
            || getProcAddress("glMultiTexCoord2hvNV", glMultiTexCoord2hvNV, false) == false
            || getProcAddress("glMultiTexCoord3hNV", glMultiTexCoord3hNV, false) == false
            || getProcAddress("glMultiTexCoord3hvNV", glMultiTexCoord3hvNV, false) == false
            || getProcAddress("glMultiTexCoord4hNV", glMultiTexCoord4hNV, false) == false
            || getProcAddress("glMultiTexCoord4hvNV", glMultiTexCoord4hvNV, false) == false
            || getProcAddress("glFogCoordhNV", glFogCoordhNV, false) == false
            || getProcAddress("glFogCoordhvNV", glFogCoordhvNV, false) == false
            || getProcAddress("glSecondaryColor3hNV", glSecondaryColor3hNV, false) == false
            || getProcAddress("glSecondaryColor3hvNV", glSecondaryColor3hvNV, false) == false
            || getProcAddress("glVertexWeighthNV", glVertexWeighthNV, false) == false
            || getProcAddress("glVertexWeighthvNV", glVertexWeighthvNV, false) == false
            || getProcAddress("glVertexAttrib1hNV", glVertexAttrib1hNV, false) == false
            || getProcAddress("glVertexAttrib1hvNV", glVertexAttrib1hvNV, false) == false
            || getProcAddress("glVertexAttrib2hNV", glVertexAttrib2hNV, false) == false
            || getProcAddress("glVertexAttrib2hvNV", glVertexAttrib2hvNV, false) == false
            || getProcAddress("glVertexAttrib3hNV", glVertexAttrib3hNV, false) == false
            || getProcAddress("glVertexAttrib3hvNV", glVertexAttrib3hvNV, false) == false
            || getProcAddress("glVertexAttrib4hNV", glVertexAttrib4hNV, false) == false
            || getProcAddress("glVertexAttrib4hvNV", glVertexAttrib4hvNV, false) == false
            || getProcAddress("glVertexAttribs1hvNV", glVertexAttribs1hvNV, false) == false
            || getProcAddress("glVertexAttribs2hvNV", glVertexAttribs2hvNV, false) == false
            || getProcAddress("glVertexAttribs3hvNV", glVertexAttribs3hvNV, false) == false
            || getProcAddress("glVertexAttribs4hvNV", glVertexAttribs4hvNV, false) == false
        ){
            GL_NV_half_float_supported = false;
        }
    }

    if(GL_NV_pixel_data_range_supported = isExtensionSupported("GL_NV_pixel_data_range", false)){
        if(getProcAddress("glPixelDataRangeNV", glPixelDataRangeNV, false) == false
            || getProcAddress("glFlushPixelDataRangeNV", glFlushPixelDataRangeNV, false) == false
        ){
            GL_NV_pixel_data_range_supported = false;
        }
    }

    if(GL_NV_primitive_restart_supported = isExtensionSupported("GL_NV_primitive_restart", false)){
        if(getProcAddress("glPrimitiveRestartNV", glPrimitiveRestartNV, false) == false
            || getProcAddress("glPrimitiveRestartIndexNV", glPrimitiveRestartIndexNV, false) == false
        ){
            GL_NV_primitive_restart_supported = false;
        }
    }
    GL_NV_texture_expand_normal_supported = isExtensionSupported("GL_NV_texture_expand_normal", false);
    GL_NV_vertex_program2_supported = isExtensionSupported("GL_NV_vertex_program2", false);

    if(GL_ATI_map_object_buffer_supported = isExtensionSupported("GL_ATI_map_object_buffer", false)){
        if(getProcAddress("glMapObjectBufferATI", glMapObjectBufferATI, false) == false
            || getProcAddress("glUnmapObjectBufferATI", glUnmapObjectBufferATI, false) == false
        ){
            GL_ATI_map_object_buffer_supported = false;
        }
    }

    if(GL_ATI_separate_stencil_supported = isExtensionSupported("GL_ATI_separate_stencil", false)){
        if(getProcAddress("glStencilOpSeparateATI", glStencilOpSeparateATI, false) == false
            || getProcAddress("glStencilFuncSeparateATI", glStencilFuncSeparateATI, false) == false
        ){
            GL_ATI_separate_stencil_supported = false;
        }
    }

    if(GL_ATI_vertex_attrib_array_object_supported = isExtensionSupported("GL_ATI_vertex_attrib_array_object", false)){
        if(getProcAddress("glVertexAttribArrayObjectATI", glVertexAttribArrayObjectATI, false) == false
            || getProcAddress("glGetVertexAttribArrayObjectfvATI", glGetVertexAttribArrayObjectfvATI, false) == false
            || getProcAddress("glGetVertexAttribArrayObjectivATI", glGetVertexAttribArrayObjectivATI, false) == false
        ){
            GL_ATI_vertex_attrib_array_object_supported = false;
        }
    }
    GL_OES_read_format_supported = isExtensionSupported("GL_OES_read_format", false);

    if(GL_EXT_depth_bounds_test_supported = isExtensionSupported("GL_EXT_depth_bounds_test", false)){
        if(getProcAddress("glDepthBoundsEXT", glDepthBoundsEXT, false) == false
        ){
            GL_EXT_depth_bounds_test_supported = false;
        }
    }
    GL_EXT_texture_mirror_clamp_supported = isExtensionSupported("GL_EXT_texture_mirror_clamp", false);

    if(GL_EXT_blend_equation_separate_supported = isExtensionSupported("GL_EXT_blend_equation_separate", false)){
        if(getProcAddress("glBlendEquationSeparateEXT", glBlendEquationSeparateEXT, false) == false
        ){
            GL_EXT_blend_equation_separate_supported = false;
        }
    }
    GL_MESA_pack_invert_supported = isExtensionSupported("GL_MESA_pack_invert", false);
    GL_MESA_ycbcr_texture_supported = isExtensionSupported("GL_MESA_ycbcr_texture", false);
    GL_EXT_pixel_buffer_object_supported = isExtensionSupported("GL_EXT_pixel_buffer_object", false);
    GL_NV_fragment_program_option_supported = isExtensionSupported("GL_NV_fragment_program_option", false);
    GL_NV_fragment_program2_supported = isExtensionSupported("GL_NV_fragment_program2", false);
    GL_NV_vertex_program2_option_supported = isExtensionSupported("GL_NV_vertex_program2_option", false);
    GL_NV_vertex_program3_supported = isExtensionSupported("GL_NV_vertex_program3", false);

    if(GL_EXT_framebuffer_object_supported = isExtensionSupported("GL_EXT_framebuffer_object", false)){
        if(getProcAddress("glIsRenderbufferEXT", glIsRenderbufferEXT, false) == false
            || getProcAddress("glBindRenderbufferEXT", glBindRenderbufferEXT, false) == false
            || getProcAddress("glDeleteRenderbuffersEXT", glDeleteRenderbuffersEXT, false) == false
            || getProcAddress("glGenRenderbuffersEXT", glGenRenderbuffersEXT, false) == false
            || getProcAddress("glRenderbufferStorageEXT", glRenderbufferStorageEXT, false) == false
            || getProcAddress("glGetRenderbufferParameterivEXT", glGetRenderbufferParameterivEXT, false) == false
            || getProcAddress("glIsFramebufferEXT", glIsFramebufferEXT, false) == false
            || getProcAddress("glBindFramebufferEXT", glBindFramebufferEXT, false) == false
            || getProcAddress("glDeleteFramebuffersEXT", glDeleteFramebuffersEXT, false) == false
            || getProcAddress("glGenFramebuffersEXT", glGenFramebuffersEXT, false) == false
            || getProcAddress("glCheckFramebufferStatusEXT", glCheckFramebufferStatusEXT, false) == false
            || getProcAddress("glFramebufferTexture1DEXT", glFramebufferTexture1DEXT, false) == false
            || getProcAddress("glFramebufferTexture2DEXT", glFramebufferTexture2DEXT, false) == false
            || getProcAddress("glFramebufferTexture3DEXT", glFramebufferTexture3DEXT, false) == false
            || getProcAddress("glFramebufferRenderbufferEXT", glFramebufferRenderbufferEXT, false) == false
            || getProcAddress("glGetFramebufferAttachmentParameterivEXT", glGetFramebufferAttachmentParameterivEXT, false) == false
            || getProcAddress("glGenerateMipmapEXT", glGenerateMipmapEXT, false) == false
        ){
            GL_EXT_framebuffer_object_supported = false;
        }
    }

    if(GL_GREMEDY_string_marker_supported = isExtensionSupported("GL_GREMEDY_string_marker", false)){
        if(getProcAddress("glStringMarkerGREMEDY", glStringMarkerGREMEDY, false) == false
        ){
            GL_GREMEDY_string_marker_supported = false;
        }
    }
    GL_EXT_packed_depth_stencil_supported = isExtensionSupported("GL_EXT_packed_depth_stencil", false);

    if(GL_EXT_stencil_clear_tag_supported = isExtensionSupported("GL_EXT_stencil_clear_tag", false)){
        if(getProcAddress("glStencilClearTagEXT", glStencilClearTagEXT, false) == false
        ){
            GL_EXT_stencil_clear_tag_supported = false;
        }
    }
    GL_EXT_texture_sRGB_supported = isExtensionSupported("GL_EXT_texture_sRGB", false);

    if(GL_EXT_framebuffer_blit_supported = isExtensionSupported("GL_EXT_framebuffer_blit", false)){
        if(getProcAddress("glBlitFramebufferEXT", glBlitFramebufferEXT, false) == false
        ){
            GL_EXT_framebuffer_blit_supported = false;
        }
    }

    if(GL_EXT_framebuffer_multisample_supported = isExtensionSupported("GL_EXT_framebuffer_multisample", false)){
        if(getProcAddress("glRenderbufferStorageMultisampleEXT", glRenderbufferStorageMultisampleEXT, false) == false
        ){
            GL_EXT_framebuffer_multisample_supported = false;
        }
    }
    GL_MESAX_texture_stack_supported = isExtensionSupported("GL_MESAX_texture_stack", false);

    if(GL_EXT_timer_query_supported = isExtensionSupported("GL_EXT_timer_query", false)){
        if(getProcAddress("glGetQueryObjecti64vEXT", glGetQueryObjecti64vEXT, false) == false
            || getProcAddress("glGetQueryObjectui64vEXT", glGetQueryObjectui64vEXT, false) == false
        ){
            GL_EXT_timer_query_supported = false;
        }
    }

    if(GL_EXT_gpu_program_parameters_supported = isExtensionSupported("GL_EXT_gpu_program_parameters", false)){
        if(getProcAddress("glProgramEnvParameters4fvEXT", glProgramEnvParameters4fvEXT, false) == false
            || getProcAddress("glProgramLocalParameters4fvEXT", glProgramLocalParameters4fvEXT, false) == false
        ){
            GL_EXT_gpu_program_parameters_supported = false;
        }
    }

    if(GL_APPLE_flush_buffer_range_supported = isExtensionSupported("GL_APPLE_flush_buffer_range", false)){
        if(getProcAddress("glBufferParameteriAPPLE", glBufferParameteriAPPLE, false) == false
            || getProcAddress("glFlushMappedBufferRangeAPPLE", glFlushMappedBufferRangeAPPLE, false) == false
        ){
            GL_APPLE_flush_buffer_range_supported = false;
        }
    }

    if(GL_NV_gpu_program4_supported = isExtensionSupported("GL_NV_gpu_program4", false)){
        if(getProcAddress("glProgramLocalParameterI4iNV", glProgramLocalParameterI4iNV, false) == false
            || getProcAddress("glProgramLocalParameterI4ivNV", glProgramLocalParameterI4ivNV, false) == false
            || getProcAddress("glProgramLocalParametersI4ivNV", glProgramLocalParametersI4ivNV, false) == false
            || getProcAddress("glProgramLocalParameterI4uiNV", glProgramLocalParameterI4uiNV, false) == false
            || getProcAddress("glProgramLocalParameterI4uivNV", glProgramLocalParameterI4uivNV, false) == false
            || getProcAddress("glProgramLocalParametersI4uivNV", glProgramLocalParametersI4uivNV, false) == false
            || getProcAddress("glProgramEnvParameterI4iNV", glProgramEnvParameterI4iNV, false) == false
            || getProcAddress("glProgramEnvParameterI4ivNV", glProgramEnvParameterI4ivNV, false) == false
            || getProcAddress("glProgramEnvParametersI4ivNV", glProgramEnvParametersI4ivNV, false) == false
            || getProcAddress("glProgramEnvParameterI4uiNV", glProgramEnvParameterI4uiNV, false) == false
            || getProcAddress("glProgramEnvParameterI4uivNV", glProgramEnvParameterI4uivNV, false) == false
            || getProcAddress("glProgramEnvParametersI4uivNV", glProgramEnvParametersI4uivNV, false) == false
            || getProcAddress("glGetProgramLocalParameterIivNV", glGetProgramLocalParameterIivNV, false) == false
            || getProcAddress("glGetProgramLocalParameterIuivNV", glGetProgramLocalParameterIuivNV, false) == false
            || getProcAddress("glGetProgramEnvParameterIivNV", glGetProgramEnvParameterIivNV, false) == false
            || getProcAddress("glGetProgramEnvParameterIuivNV", glGetProgramEnvParameterIuivNV, false) == false
        ){
            GL_NV_gpu_program4_supported = false;
        }
    }

    if(GL_NV_geometry_program4_supported = isExtensionSupported("GL_NV_geometry_program4", false)){
        if(getProcAddress("glProgramVertexLimitNV", glProgramVertexLimitNV, false) == false
            || getProcAddress("glFramebufferTextureEXT", glFramebufferTextureEXT, false) == false
            || getProcAddress("glFramebufferTextureLayerEXT", glFramebufferTextureLayerEXT, false) == false
            || getProcAddress("glFramebufferTextureFaceEXT", glFramebufferTextureFaceEXT, false) == false
        ){
            GL_NV_geometry_program4_supported = false;
        }
    }

    if(GL_EXT_geometry_shader4_supported = isExtensionSupported("GL_EXT_geometry_shader4", false)){
        if(getProcAddress("glProgramParameteriEXT", glProgramParameteriEXT, false) == false
        ){
            GL_EXT_geometry_shader4_supported = false;
        }
    }

    if(GL_NV_vertex_program4_supported = isExtensionSupported("GL_NV_vertex_program4", false)){
        if(getProcAddress("glVertexAttribI1iEXT", glVertexAttribI1iEXT, false) == false
            || getProcAddress("glVertexAttribI2iEXT", glVertexAttribI2iEXT, false) == false
            || getProcAddress("glVertexAttribI3iEXT", glVertexAttribI3iEXT, false) == false
            || getProcAddress("glVertexAttribI4iEXT", glVertexAttribI4iEXT, false) == false
            || getProcAddress("glVertexAttribI1uiEXT", glVertexAttribI1uiEXT, false) == false
            || getProcAddress("glVertexAttribI2uiEXT", glVertexAttribI2uiEXT, false) == false
            || getProcAddress("glVertexAttribI3uiEXT", glVertexAttribI3uiEXT, false) == false
            || getProcAddress("glVertexAttribI4uiEXT", glVertexAttribI4uiEXT, false) == false
            || getProcAddress("glVertexAttribI1ivEXT", glVertexAttribI1ivEXT, false) == false
            || getProcAddress("glVertexAttribI2ivEXT", glVertexAttribI2ivEXT, false) == false
            || getProcAddress("glVertexAttribI3ivEXT", glVertexAttribI3ivEXT, false) == false
            || getProcAddress("glVertexAttribI4ivEXT", glVertexAttribI4ivEXT, false) == false
            || getProcAddress("glVertexAttribI1uivEXT", glVertexAttribI1uivEXT, false) == false
            || getProcAddress("glVertexAttribI2uivEXT", glVertexAttribI2uivEXT, false) == false
            || getProcAddress("glVertexAttribI3uivEXT", glVertexAttribI3uivEXT, false) == false
            || getProcAddress("glVertexAttribI4uivEXT", glVertexAttribI4uivEXT, false) == false
            || getProcAddress("glVertexAttribI4bvEXT", glVertexAttribI4bvEXT, false) == false
            || getProcAddress("glVertexAttribI4svEXT", glVertexAttribI4svEXT, false) == false
            || getProcAddress("glVertexAttribI4ubvEXT", glVertexAttribI4ubvEXT, false) == false
            || getProcAddress("glVertexAttribI4usvEXT", glVertexAttribI4usvEXT, false) == false
            || getProcAddress("glVertexAttribIPointerEXT", glVertexAttribIPointerEXT, false) == false
            || getProcAddress("glGetVertexAttribIivEXT", glGetVertexAttribIivEXT, false) == false
            || getProcAddress("glGetVertexAttribIuivEXT", glGetVertexAttribIuivEXT, false) == false
        ){
            GL_NV_vertex_program4_supported = false;
        }
    }

    if(GL_EXT_gpu_shader4_supported = isExtensionSupported("GL_EXT_gpu_shader4", false)){
        if(getProcAddress("glGetUniformuivEXT", glGetUniformuivEXT, false) == false
            || getProcAddress("glBindFragDataLocationEXT", glBindFragDataLocationEXT, false) == false
            || getProcAddress("glGetFragDataLocationEXT", glGetFragDataLocationEXT, false) == false
            || getProcAddress("glUniform1uiEXT", glUniform1uiEXT, false) == false
            || getProcAddress("glUniform2uiEXT", glUniform2uiEXT, false) == false
            || getProcAddress("glUniform3uiEXT", glUniform3uiEXT, false) == false
            || getProcAddress("glUniform4uiEXT", glUniform4uiEXT, false) == false
            || getProcAddress("glUniform1uivEXT", glUniform1uivEXT, false) == false
            || getProcAddress("glUniform2uivEXT", glUniform2uivEXT, false) == false
            || getProcAddress("glUniform3uivEXT", glUniform3uivEXT, false) == false
            || getProcAddress("glUniform4uivEXT", glUniform4uivEXT, false) == false
        ){
            GL_EXT_gpu_shader4_supported = false;
        }
    }

    if(GL_EXT_draw_instanced_supported = isExtensionSupported("GL_EXT_draw_instanced", false)){
        if(getProcAddress("glDrawArraysInstancedEXT", glDrawArraysInstancedEXT, false) == false
            || getProcAddress("glDrawElementsInstancedEXT", glDrawElementsInstancedEXT, false) == false
        ){
            GL_EXT_draw_instanced_supported = false;
        }
    }
    GL_EXT_packed_float_supported = isExtensionSupported("GL_EXT_packed_float", false);
    GL_EXT_texture_array_supported = isExtensionSupported("GL_EXT_texture_array", false);

    if(GL_EXT_texture_buffer_object_supported = isExtensionSupported("GL_EXT_texture_buffer_object", false)){
        if(getProcAddress("glTexBufferEXT", glTexBufferEXT, false) == false
        ){
            GL_EXT_texture_buffer_object_supported = false;
        }
    }
    GL_EXT_texture_compression_latc_supported = isExtensionSupported("GL_EXT_texture_compression_latc", false);
    GL_EXT_texture_compression_rgtc_supported = isExtensionSupported("GL_EXT_texture_compression_rgtc", false);
    GL_EXT_texture_shared_exponent_supported = isExtensionSupported("GL_EXT_texture_shared_exponent", false);

    if(GL_NV_depth_buffer_float_supported = isExtensionSupported("GL_NV_depth_buffer_float", false)){
        if(getProcAddress("glDepthRangedNV", glDepthRangedNV, false) == false
            || getProcAddress("glClearDepthdNV", glClearDepthdNV, false) == false
            || getProcAddress("glDepthBoundsdNV", glDepthBoundsdNV, false) == false
        ){
            GL_NV_depth_buffer_float_supported = false;
        }
    }
    GL_NV_fragment_program4_supported = isExtensionSupported("GL_NV_fragment_program4", false);

    if(GL_NV_framebuffer_multisample_coverage_supported = isExtensionSupported("GL_NV_framebuffer_multisample_coverage", false)){
        if(getProcAddress("glRenderbufferStorageMultisampleCoverageNV", glRenderbufferStorageMultisampleCoverageNV, false) == false
        ){
            GL_NV_framebuffer_multisample_coverage_supported = false;
        }
    }
    GL_EXT_framebuffer_sRGB_supported = isExtensionSupported("GL_EXT_framebuffer_sRGB", false);
    GL_NV_geometry_shader4_supported = isExtensionSupported("GL_NV_geometry_shader4", false);

    if(GL_NV_parameter_buffer_object_supported = isExtensionSupported("GL_NV_parameter_buffer_object", false)){
        if(getProcAddress("glProgramBufferParametersfvNV", glProgramBufferParametersfvNV, false) == false
            || getProcAddress("glProgramBufferParametersIivNV", glProgramBufferParametersIivNV, false) == false
            || getProcAddress("glProgramBufferParametersIuivNV", glProgramBufferParametersIuivNV, false) == false
        ){
            GL_NV_parameter_buffer_object_supported = false;
        }
    }

    if(GL_EXT_draw_buffers2_supported = isExtensionSupported("GL_EXT_draw_buffers2", false)){
        if(getProcAddress("glColorMaskIndexedEXT", glColorMaskIndexedEXT, false) == false
            || getProcAddress("glGetBooleanIndexedvEXT", glGetBooleanIndexedvEXT, false) == false
            || getProcAddress("glGetIntegerIndexedvEXT", glGetIntegerIndexedvEXT, false) == false
            || getProcAddress("glEnableIndexedEXT", glEnableIndexedEXT, false) == false
            || getProcAddress("glDisableIndexedEXT", glDisableIndexedEXT, false) == false
            || getProcAddress("glIsEnabledIndexedEXT", glIsEnabledIndexedEXT, false) == false
        ){
            GL_EXT_draw_buffers2_supported = false;
        }
    }

    if(GL_NV_transform_feedback_supported = isExtensionSupported("GL_NV_transform_feedback", false)){
        if(getProcAddress("glBeginTransformFeedbackNV", glBeginTransformFeedbackNV, false) == false
            || getProcAddress("glEndTransformFeedbackNV", glEndTransformFeedbackNV, false) == false
            || getProcAddress("glTransformFeedbackAttribsNV", glTransformFeedbackAttribsNV, false) == false
            || getProcAddress("glBindBufferRangeNV", glBindBufferRangeNV, false) == false
            || getProcAddress("glBindBufferOffsetNV", glBindBufferOffsetNV, false) == false
            || getProcAddress("glBindBufferBaseNV", glBindBufferBaseNV, false) == false
            || getProcAddress("glTransformFeedbackVaryingsNV", glTransformFeedbackVaryingsNV, false) == false
            || getProcAddress("glActiveVaryingNV", glActiveVaryingNV, false) == false
            || getProcAddress("glGetVaryingLocationNV", glGetVaryingLocationNV, false) == false
            || getProcAddress("glGetActiveVaryingNV", glGetActiveVaryingNV, false) == false
            || getProcAddress("glGetTransformFeedbackVaryingNV", glGetTransformFeedbackVaryingNV, false) == false
            || getProcAddress("glTransformFeedbackStreamAttribsNV", glTransformFeedbackStreamAttribsNV, false) == false
        ){
            GL_NV_transform_feedback_supported = false;
        }
    }

    if(GL_EXT_bindable_uniform_supported = isExtensionSupported("GL_EXT_bindable_uniform", false)){
        if(getProcAddress("glUniformBufferEXT", glUniformBufferEXT, false) == false
            || getProcAddress("glGetUniformBufferSizeEXT", glGetUniformBufferSizeEXT, false) == false
            || getProcAddress("glGetUniformOffsetEXT", glGetUniformOffsetEXT, false) == false
        ){
            GL_EXT_bindable_uniform_supported = false;
        }
    }

    if(GL_EXT_texture_integer_supported = isExtensionSupported("GL_EXT_texture_integer", false)){
        if(getProcAddress("glTexParameterIivEXT", glTexParameterIivEXT, false) == false
            || getProcAddress("glTexParameterIuivEXT", glTexParameterIuivEXT, false) == false
            || getProcAddress("glGetTexParameterIivEXT", glGetTexParameterIivEXT, false) == false
            || getProcAddress("glGetTexParameterIuivEXT", glGetTexParameterIuivEXT, false) == false
            || getProcAddress("glClearColorIiEXT", glClearColorIiEXT, false) == false
            || getProcAddress("glClearColorIuiEXT", glClearColorIuiEXT, false) == false
        ){
            GL_EXT_texture_integer_supported = false;
        }
    }

    if(GL_GREMEDY_frame_terminator_supported = isExtensionSupported("GL_GREMEDY_frame_terminator", false)){
        if(getProcAddress("glFrameTerminatorGREMEDY", glFrameTerminatorGREMEDY, false) == false
        ){
            GL_GREMEDY_frame_terminator_supported = false;
        }
    }

    if(GL_NV_conditional_render_supported = isExtensionSupported("GL_NV_conditional_render", false)){
        if(getProcAddress("glBeginConditionalRenderNV", glBeginConditionalRenderNV, false) == false
            || getProcAddress("glEndConditionalRenderNV", glEndConditionalRenderNV, false) == false
        ){
            GL_NV_conditional_render_supported = false;
        }
    }

    if(GL_NV_present_video_supported = isExtensionSupported("GL_NV_present_video", false)){
        if(getProcAddress("glPresentFrameKeyedNV", glPresentFrameKeyedNV, false) == false
            || getProcAddress("glPresentFrameDualFillNV", glPresentFrameDualFillNV, false) == false
            || getProcAddress("glGetVideoivNV", glGetVideoivNV, false) == false
            || getProcAddress("glGetVideouivNV", glGetVideouivNV, false) == false
            || getProcAddress("glGetVideoi64vNV", glGetVideoi64vNV, false) == false
            || getProcAddress("glGetVideoui64vNV", glGetVideoui64vNV, false) == false
        ){
            GL_NV_present_video_supported = false;
        }
    }

    if(GL_EXT_transform_feedback_supported = isExtensionSupported("GL_EXT_transform_feedback", false)){
        if(getProcAddress("glBeginTransformFeedbackEXT", glBeginTransformFeedbackEXT, false) == false
            || getProcAddress("glEndTransformFeedbackEXT", glEndTransformFeedbackEXT, false) == false
            || getProcAddress("glBindBufferRangeEXT", glBindBufferRangeEXT, false) == false
            || getProcAddress("glBindBufferOffsetEXT", glBindBufferOffsetEXT, false) == false
            || getProcAddress("glBindBufferBaseEXT", glBindBufferBaseEXT, false) == false
            || getProcAddress("glTransformFeedbackVaryingsEXT", glTransformFeedbackVaryingsEXT, false) == false
            || getProcAddress("glGetTransformFeedbackVaryingEXT", glGetTransformFeedbackVaryingEXT, false) == false
        ){
            GL_EXT_transform_feedback_supported = false;
        }
    }

    if(GL_EXT_direct_state_access_supported = isExtensionSupported("GL_EXT_direct_state_access", false)){
        if(getProcAddress("glClientAttribDefaultEXT", glClientAttribDefaultEXT, false) == false
            || getProcAddress("glPushClientAttribDefaultEXT", glPushClientAttribDefaultEXT, false) == false
            || getProcAddress("glMatrixLoadfEXT", glMatrixLoadfEXT, false) == false
            || getProcAddress("glMatrixLoaddEXT", glMatrixLoaddEXT, false) == false
            || getProcAddress("glMatrixMultfEXT", glMatrixMultfEXT, false) == false
            || getProcAddress("glMatrixMultdEXT", glMatrixMultdEXT, false) == false
            || getProcAddress("glMatrixLoadIdentityEXT", glMatrixLoadIdentityEXT, false) == false
            || getProcAddress("glMatrixRotatefEXT", glMatrixRotatefEXT, false) == false
            || getProcAddress("glMatrixRotatedEXT", glMatrixRotatedEXT, false) == false
            || getProcAddress("glMatrixScalefEXT", glMatrixScalefEXT, false) == false
            || getProcAddress("glMatrixScaledEXT", glMatrixScaledEXT, false) == false
            || getProcAddress("glMatrixTranslatefEXT", glMatrixTranslatefEXT, false) == false
            || getProcAddress("glMatrixTranslatedEXT", glMatrixTranslatedEXT, false) == false
            || getProcAddress("glMatrixFrustumEXT", glMatrixFrustumEXT, false) == false
            || getProcAddress("glMatrixOrthoEXT", glMatrixOrthoEXT, false) == false
            || getProcAddress("glMatrixPopEXT", glMatrixPopEXT, false) == false
            || getProcAddress("glMatrixPushEXT", glMatrixPushEXT, false) == false
            || getProcAddress("glMatrixLoadTransposefEXT", glMatrixLoadTransposefEXT, false) == false
            || getProcAddress("glMatrixLoadTransposedEXT", glMatrixLoadTransposedEXT, false) == false
            || getProcAddress("glMatrixMultTransposefEXT", glMatrixMultTransposefEXT, false) == false
            || getProcAddress("glMatrixMultTransposedEXT", glMatrixMultTransposedEXT, false) == false
            || getProcAddress("glTextureParameterfEXT", glTextureParameterfEXT, false) == false
            || getProcAddress("glTextureParameterfvEXT", glTextureParameterfvEXT, false) == false
            || getProcAddress("glTextureParameteriEXT", glTextureParameteriEXT, false) == false
            || getProcAddress("glTextureParameterivEXT", glTextureParameterivEXT, false) == false
            || getProcAddress("glTextureImage1DEXT", glTextureImage1DEXT, false) == false
            || getProcAddress("glTextureImage2DEXT", glTextureImage2DEXT, false) == false
            || getProcAddress("glTextureSubImage1DEXT", glTextureSubImage1DEXT, false) == false
            || getProcAddress("glTextureSubImage2DEXT", glTextureSubImage2DEXT, false) == false
            || getProcAddress("glCopyTextureImage1DEXT", glCopyTextureImage1DEXT, false) == false
            || getProcAddress("glCopyTextureImage2DEXT", glCopyTextureImage2DEXT, false) == false
            || getProcAddress("glCopyTextureSubImage1DEXT", glCopyTextureSubImage1DEXT, false) == false
            || getProcAddress("glCopyTextureSubImage2DEXT", glCopyTextureSubImage2DEXT, false) == false
            || getProcAddress("glGetTextureImageEXT", glGetTextureImageEXT, false) == false
            || getProcAddress("glGetTextureParameterfvEXT", glGetTextureParameterfvEXT, false) == false
            || getProcAddress("glGetTextureParameterivEXT", glGetTextureParameterivEXT, false) == false
            || getProcAddress("glGetTextureLevelParameterfvEXT", glGetTextureLevelParameterfvEXT, false) == false
            || getProcAddress("glGetTextureLevelParameterivEXT", glGetTextureLevelParameterivEXT, false) == false
            || getProcAddress("glTextureImage3DEXT", glTextureImage3DEXT, false) == false
            || getProcAddress("glTextureSubImage3DEXT", glTextureSubImage3DEXT, false) == false
            || getProcAddress("glCopyTextureSubImage3DEXT", glCopyTextureSubImage3DEXT, false) == false
            || getProcAddress("glMultiTexParameterfEXT", glMultiTexParameterfEXT, false) == false
            || getProcAddress("glMultiTexParameterfvEXT", glMultiTexParameterfvEXT, false) == false
            || getProcAddress("glMultiTexParameteriEXT", glMultiTexParameteriEXT, false) == false
            || getProcAddress("glMultiTexParameterivEXT", glMultiTexParameterivEXT, false) == false
            || getProcAddress("glMultiTexImage1DEXT", glMultiTexImage1DEXT, false) == false
            || getProcAddress("glMultiTexImage2DEXT", glMultiTexImage2DEXT, false) == false
            || getProcAddress("glMultiTexSubImage1DEXT", glMultiTexSubImage1DEXT, false) == false
            || getProcAddress("glMultiTexSubImage2DEXT", glMultiTexSubImage2DEXT, false) == false
            || getProcAddress("glCopyMultiTexImage1DEXT", glCopyMultiTexImage1DEXT, false) == false
            || getProcAddress("glCopyMultiTexImage2DEXT", glCopyMultiTexImage2DEXT, false) == false
            || getProcAddress("glCopyMultiTexSubImage1DEXT", glCopyMultiTexSubImage1DEXT, false) == false
            || getProcAddress("glCopyMultiTexSubImage2DEXT", glCopyMultiTexSubImage2DEXT, false) == false
            || getProcAddress("glGetMultiTexImageEXT", glGetMultiTexImageEXT, false) == false
            || getProcAddress("glGetMultiTexParameterfvEXT", glGetMultiTexParameterfvEXT, false) == false
            || getProcAddress("glGetMultiTexParameterivEXT", glGetMultiTexParameterivEXT, false) == false
            || getProcAddress("glGetMultiTexLevelParameterfvEXT", glGetMultiTexLevelParameterfvEXT, false) == false
            || getProcAddress("glGetMultiTexLevelParameterivEXT", glGetMultiTexLevelParameterivEXT, false) == false
            || getProcAddress("glMultiTexImage3DEXT", glMultiTexImage3DEXT, false) == false
            || getProcAddress("glMultiTexSubImage3DEXT", glMultiTexSubImage3DEXT, false) == false
            || getProcAddress("glCopyMultiTexSubImage3DEXT", glCopyMultiTexSubImage3DEXT, false) == false
            || getProcAddress("glBindMultiTextureEXT", glBindMultiTextureEXT, false) == false
            || getProcAddress("glEnableClientStateIndexedEXT", glEnableClientStateIndexedEXT, false) == false
            || getProcAddress("glDisableClientStateIndexedEXT", glDisableClientStateIndexedEXT, false) == false
            || getProcAddress("glMultiTexCoordPointerEXT", glMultiTexCoordPointerEXT, false) == false
            || getProcAddress("glMultiTexEnvfEXT", glMultiTexEnvfEXT, false) == false
            || getProcAddress("glMultiTexEnvfvEXT", glMultiTexEnvfvEXT, false) == false
            || getProcAddress("glMultiTexEnviEXT", glMultiTexEnviEXT, false) == false
            || getProcAddress("glMultiTexEnvivEXT", glMultiTexEnvivEXT, false) == false
            || getProcAddress("glMultiTexGendEXT", glMultiTexGendEXT, false) == false
            || getProcAddress("glMultiTexGendvEXT", glMultiTexGendvEXT, false) == false
            || getProcAddress("glMultiTexGenfEXT", glMultiTexGenfEXT, false) == false
            || getProcAddress("glMultiTexGenfvEXT", glMultiTexGenfvEXT, false) == false
            || getProcAddress("glMultiTexGeniEXT", glMultiTexGeniEXT, false) == false
            || getProcAddress("glMultiTexGenivEXT", glMultiTexGenivEXT, false) == false
            || getProcAddress("glGetMultiTexEnvfvEXT", glGetMultiTexEnvfvEXT, false) == false
            || getProcAddress("glGetMultiTexEnvivEXT", glGetMultiTexEnvivEXT, false) == false
            || getProcAddress("glGetMultiTexGendvEXT", glGetMultiTexGendvEXT, false) == false
            || getProcAddress("glGetMultiTexGenfvEXT", glGetMultiTexGenfvEXT, false) == false
            || getProcAddress("glGetMultiTexGenivEXT", glGetMultiTexGenivEXT, false) == false
            || getProcAddress("glGetFloatIndexedvEXT", glGetFloatIndexedvEXT, false) == false
            || getProcAddress("glGetDoubleIndexedvEXT", glGetDoubleIndexedvEXT, false) == false
            || getProcAddress("glGetPointerIndexedvEXT", glGetPointerIndexedvEXT, false) == false
            || getProcAddress("glCompressedTextureImage3DEXT", glCompressedTextureImage3DEXT, false) == false
            || getProcAddress("glCompressedTextureImage2DEXT", glCompressedTextureImage2DEXT, false) == false
            || getProcAddress("glCompressedTextureImage1DEXT", glCompressedTextureImage1DEXT, false) == false
            || getProcAddress("glCompressedTextureSubImage3DEXT", glCompressedTextureSubImage3DEXT, false) == false
            || getProcAddress("glCompressedTextureSubImage2DEXT", glCompressedTextureSubImage2DEXT, false) == false
            || getProcAddress("glCompressedTextureSubImage1DEXT", glCompressedTextureSubImage1DEXT, false) == false
            || getProcAddress("glGetCompressedTextureImageEXT", glGetCompressedTextureImageEXT, false) == false
            || getProcAddress("glCompressedMultiTexImage3DEXT", glCompressedMultiTexImage3DEXT, false) == false
            || getProcAddress("glCompressedMultiTexImage2DEXT", glCompressedMultiTexImage2DEXT, false) == false
            || getProcAddress("glCompressedMultiTexImage1DEXT", glCompressedMultiTexImage1DEXT, false) == false
            || getProcAddress("glCompressedMultiTexSubImage3DEXT", glCompressedMultiTexSubImage3DEXT, false) == false
            || getProcAddress("glCompressedMultiTexSubImage2DEXT", glCompressedMultiTexSubImage2DEXT, false) == false
            || getProcAddress("glCompressedMultiTexSubImage1DEXT", glCompressedMultiTexSubImage1DEXT, false) == false
            || getProcAddress("glGetCompressedMultiTexImageEXT", glGetCompressedMultiTexImageEXT, false) == false
            || getProcAddress("glNamedProgramStringEXT", glNamedProgramStringEXT, false) == false
            || getProcAddress("glNamedProgramLocalParameter4dEXT", glNamedProgramLocalParameter4dEXT, false) == false
            || getProcAddress("glNamedProgramLocalParameter4dvEXT", glNamedProgramLocalParameter4dvEXT, false) == false
            || getProcAddress("glNamedProgramLocalParameter4fEXT", glNamedProgramLocalParameter4fEXT, false) == false
            || getProcAddress("glNamedProgramLocalParameter4fvEXT", glNamedProgramLocalParameter4fvEXT, false) == false
            || getProcAddress("glGetNamedProgramLocalParameterdvEXT", glGetNamedProgramLocalParameterdvEXT, false) == false
            || getProcAddress("glGetNamedProgramLocalParameterfvEXT", glGetNamedProgramLocalParameterfvEXT, false) == false
            || getProcAddress("glGetNamedProgramivEXT", glGetNamedProgramivEXT, false) == false
            || getProcAddress("glGetNamedProgramStringEXT", glGetNamedProgramStringEXT, false) == false
            || getProcAddress("glNamedProgramLocalParameters4fvEXT", glNamedProgramLocalParameters4fvEXT, false) == false
            || getProcAddress("glNamedProgramLocalParameterI4iEXT", glNamedProgramLocalParameterI4iEXT, false) == false
            || getProcAddress("glNamedProgramLocalParameterI4ivEXT", glNamedProgramLocalParameterI4ivEXT, false) == false
            || getProcAddress("glNamedProgramLocalParametersI4ivEXT", glNamedProgramLocalParametersI4ivEXT, false) == false
            || getProcAddress("glNamedProgramLocalParameterI4uiEXT", glNamedProgramLocalParameterI4uiEXT, false) == false
            || getProcAddress("glNamedProgramLocalParameterI4uivEXT", glNamedProgramLocalParameterI4uivEXT, false) == false
            || getProcAddress("glNamedProgramLocalParametersI4uivEXT", glNamedProgramLocalParametersI4uivEXT, false) == false
            || getProcAddress("glGetNamedProgramLocalParameterIivEXT", glGetNamedProgramLocalParameterIivEXT, false) == false
            || getProcAddress("glGetNamedProgramLocalParameterIuivEXT", glGetNamedProgramLocalParameterIuivEXT, false) == false
            || getProcAddress("glTextureParameterIivEXT", glTextureParameterIivEXT, false) == false
            || getProcAddress("glTextureParameterIuivEXT", glTextureParameterIuivEXT, false) == false
            || getProcAddress("glGetTextureParameterIivEXT", glGetTextureParameterIivEXT, false) == false
            || getProcAddress("glGetTextureParameterIuivEXT", glGetTextureParameterIuivEXT, false) == false
            || getProcAddress("glMultiTexParameterIivEXT", glMultiTexParameterIivEXT, false) == false
            || getProcAddress("glMultiTexParameterIuivEXT", glMultiTexParameterIuivEXT, false) == false
            || getProcAddress("glGetMultiTexParameterIivEXT", glGetMultiTexParameterIivEXT, false) == false
            || getProcAddress("glGetMultiTexParameterIuivEXT", glGetMultiTexParameterIuivEXT, false) == false
            || getProcAddress("glProgramUniform1fEXT", glProgramUniform1fEXT, false) == false
            || getProcAddress("glProgramUniform2fEXT", glProgramUniform2fEXT, false) == false
            || getProcAddress("glProgramUniform3fEXT", glProgramUniform3fEXT, false) == false
            || getProcAddress("glProgramUniform4fEXT", glProgramUniform4fEXT, false) == false
            || getProcAddress("glProgramUniform1iEXT", glProgramUniform1iEXT, false) == false
            || getProcAddress("glProgramUniform2iEXT", glProgramUniform2iEXT, false) == false
            || getProcAddress("glProgramUniform3iEXT", glProgramUniform3iEXT, false) == false
            || getProcAddress("glProgramUniform4iEXT", glProgramUniform4iEXT, false) == false
            || getProcAddress("glProgramUniform1fvEXT", glProgramUniform1fvEXT, false) == false
            || getProcAddress("glProgramUniform2fvEXT", glProgramUniform2fvEXT, false) == false
            || getProcAddress("glProgramUniform3fvEXT", glProgramUniform3fvEXT, false) == false
            || getProcAddress("glProgramUniform4fvEXT", glProgramUniform4fvEXT, false) == false
            || getProcAddress("glProgramUniform1ivEXT", glProgramUniform1ivEXT, false) == false
            || getProcAddress("glProgramUniform2ivEXT", glProgramUniform2ivEXT, false) == false
            || getProcAddress("glProgramUniform3ivEXT", glProgramUniform3ivEXT, false) == false
            || getProcAddress("glProgramUniform4ivEXT", glProgramUniform4ivEXT, false) == false
            || getProcAddress("glProgramUniformMatrix2fvEXT", glProgramUniformMatrix2fvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix3fvEXT", glProgramUniformMatrix3fvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix4fvEXT", glProgramUniformMatrix4fvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix2x3fvEXT", glProgramUniformMatrix2x3fvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix3x2fvEXT", glProgramUniformMatrix3x2fvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix2x4fvEXT", glProgramUniformMatrix2x4fvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix4x2fvEXT", glProgramUniformMatrix4x2fvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix3x4fvEXT", glProgramUniformMatrix3x4fvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix4x3fvEXT", glProgramUniformMatrix4x3fvEXT, false) == false
            || getProcAddress("glProgramUniform1uiEXT", glProgramUniform1uiEXT, false) == false
            || getProcAddress("glProgramUniform2uiEXT", glProgramUniform2uiEXT, false) == false
            || getProcAddress("glProgramUniform3uiEXT", glProgramUniform3uiEXT, false) == false
            || getProcAddress("glProgramUniform4uiEXT", glProgramUniform4uiEXT, false) == false
            || getProcAddress("glProgramUniform1uivEXT", glProgramUniform1uivEXT, false) == false
            || getProcAddress("glProgramUniform2uivEXT", glProgramUniform2uivEXT, false) == false
            || getProcAddress("glProgramUniform3uivEXT", glProgramUniform3uivEXT, false) == false
            || getProcAddress("glProgramUniform4uivEXT", glProgramUniform4uivEXT, false) == false
            || getProcAddress("glNamedBufferDataEXT", glNamedBufferDataEXT, false) == false
            || getProcAddress("glNamedBufferSubDataEXT", glNamedBufferSubDataEXT, false) == false
            || getProcAddress("glMapNamedBufferEXT", glMapNamedBufferEXT, false) == false
            || getProcAddress("glUnmapNamedBufferEXT", glUnmapNamedBufferEXT, false) == false
            || getProcAddress("glMapNamedBufferRangeEXT", glMapNamedBufferRangeEXT, false) == false
            || getProcAddress("glFlushMappedNamedBufferRangeEXT", glFlushMappedNamedBufferRangeEXT, false) == false
            || getProcAddress("glNamedCopyBufferSubDataEXT", glNamedCopyBufferSubDataEXT, false) == false
            || getProcAddress("glGetNamedBufferParameterivEXT", glGetNamedBufferParameterivEXT, false) == false
            || getProcAddress("glGetNamedBufferPointervEXT", glGetNamedBufferPointervEXT, false) == false
            || getProcAddress("glGetNamedBufferSubDataEXT", glGetNamedBufferSubDataEXT, false) == false
            || getProcAddress("glTextureBufferEXT", glTextureBufferEXT, false) == false
            || getProcAddress("glMultiTexBufferEXT", glMultiTexBufferEXT, false) == false
            || getProcAddress("glNamedRenderbufferStorageEXT", glNamedRenderbufferStorageEXT, false) == false
            || getProcAddress("glGetNamedRenderbufferParameterivEXT", glGetNamedRenderbufferParameterivEXT, false) == false
            || getProcAddress("glCheckNamedFramebufferStatusEXT", glCheckNamedFramebufferStatusEXT, false) == false
            || getProcAddress("glNamedFramebufferTexture1DEXT", glNamedFramebufferTexture1DEXT, false) == false
            || getProcAddress("glNamedFramebufferTexture2DEXT", glNamedFramebufferTexture2DEXT, false) == false
            || getProcAddress("glNamedFramebufferTexture3DEXT", glNamedFramebufferTexture3DEXT, false) == false
            || getProcAddress("glNamedFramebufferRenderbufferEXT", glNamedFramebufferRenderbufferEXT, false) == false
            || getProcAddress("glGetNamedFramebufferAttachmentParameterivEXT", glGetNamedFramebufferAttachmentParameterivEXT, false) == false
            || getProcAddress("glGenerateTextureMipmapEXT", glGenerateTextureMipmapEXT, false) == false
            || getProcAddress("glGenerateMultiTexMipmapEXT", glGenerateMultiTexMipmapEXT, false) == false
            || getProcAddress("glFramebufferDrawBufferEXT", glFramebufferDrawBufferEXT, false) == false
            || getProcAddress("glFramebufferDrawBuffersEXT", glFramebufferDrawBuffersEXT, false) == false
            || getProcAddress("glFramebufferReadBufferEXT", glFramebufferReadBufferEXT, false) == false
            || getProcAddress("glGetFramebufferParameterivEXT", glGetFramebufferParameterivEXT, false) == false
            || getProcAddress("glNamedRenderbufferStorageMultisampleEXT", glNamedRenderbufferStorageMultisampleEXT, false) == false
            || getProcAddress("glNamedRenderbufferStorageMultisampleCoverageEXT", glNamedRenderbufferStorageMultisampleCoverageEXT, false) == false
            || getProcAddress("glNamedFramebufferTextureEXT", glNamedFramebufferTextureEXT, false) == false
            || getProcAddress("glNamedFramebufferTextureLayerEXT", glNamedFramebufferTextureLayerEXT, false) == false
            || getProcAddress("glNamedFramebufferTextureFaceEXT", glNamedFramebufferTextureFaceEXT, false) == false
            || getProcAddress("glTextureRenderbufferEXT", glTextureRenderbufferEXT, false) == false
            || getProcAddress("glMultiTexRenderbufferEXT", glMultiTexRenderbufferEXT, false) == false
            || getProcAddress("glProgramUniform1dEXT", glProgramUniform1dEXT, false) == false
            || getProcAddress("glProgramUniform2dEXT", glProgramUniform2dEXT, false) == false
            || getProcAddress("glProgramUniform3dEXT", glProgramUniform3dEXT, false) == false
            || getProcAddress("glProgramUniform4dEXT", glProgramUniform4dEXT, false) == false
            || getProcAddress("glProgramUniform1dvEXT", glProgramUniform1dvEXT, false) == false
            || getProcAddress("glProgramUniform2dvEXT", glProgramUniform2dvEXT, false) == false
            || getProcAddress("glProgramUniform3dvEXT", glProgramUniform3dvEXT, false) == false
            || getProcAddress("glProgramUniform4dvEXT", glProgramUniform4dvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix2dvEXT", glProgramUniformMatrix2dvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix3dvEXT", glProgramUniformMatrix3dvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix4dvEXT", glProgramUniformMatrix4dvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix2x3dvEXT", glProgramUniformMatrix2x3dvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix2x4dvEXT", glProgramUniformMatrix2x4dvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix3x2dvEXT", glProgramUniformMatrix3x2dvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix3x4dvEXT", glProgramUniformMatrix3x4dvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix4x2dvEXT", glProgramUniformMatrix4x2dvEXT, false) == false
            || getProcAddress("glProgramUniformMatrix4x3dvEXT", glProgramUniformMatrix4x3dvEXT, false) == false
        ){
            GL_EXT_direct_state_access_supported = false;
        }
    }
    GL_EXT_vertex_array_bgra_supported = isExtensionSupported("GL_EXT_vertex_array_bgra", false);
    GL_EXT_texture_swizzle_supported = isExtensionSupported("GL_EXT_texture_swizzle", false);

    if(GL_NV_explicit_multisample_supported = isExtensionSupported("GL_NV_explicit_multisample", false)){
        if(getProcAddress("glGetMultisamplefvNV", glGetMultisamplefvNV, false) == false
            || getProcAddress("glSampleMaskIndexedNV", glSampleMaskIndexedNV, false) == false
            || getProcAddress("glTexRenderbufferNV", glTexRenderbufferNV, false) == false
        ){
            GL_NV_explicit_multisample_supported = false;
        }
    }

    if(GL_NV_transform_feedback2_supported = isExtensionSupported("GL_NV_transform_feedback2", false)){
        if(getProcAddress("glBindTransformFeedbackNV", glBindTransformFeedbackNV, false) == false
            || getProcAddress("glDeleteTransformFeedbacksNV", glDeleteTransformFeedbacksNV, false) == false
            || getProcAddress("glGenTransformFeedbacksNV", glGenTransformFeedbacksNV, false) == false
            || getProcAddress("glIsTransformFeedbackNV", glIsTransformFeedbackNV, false) == false
            || getProcAddress("glPauseTransformFeedbackNV", glPauseTransformFeedbackNV, false) == false
            || getProcAddress("glResumeTransformFeedbackNV", glResumeTransformFeedbackNV, false) == false
            || getProcAddress("glDrawTransformFeedbackNV", glDrawTransformFeedbackNV, false) == false
        ){
            GL_NV_transform_feedback2_supported = false;
        }
    }
    GL_ATI_meminfo_supported = isExtensionSupported("GL_ATI_meminfo", false);

    if(GL_AMD_performance_monitor_supported = isExtensionSupported("GL_AMD_performance_monitor", false)){
        if(getProcAddress("glGetPerfMonitorGroupsAMD", glGetPerfMonitorGroupsAMD, false) == false
            || getProcAddress("glGetPerfMonitorCountersAMD", glGetPerfMonitorCountersAMD, false) == false
            || getProcAddress("glGetPerfMonitorGroupStringAMD", glGetPerfMonitorGroupStringAMD, false) == false
            || getProcAddress("glGetPerfMonitorCounterStringAMD", glGetPerfMonitorCounterStringAMD, false) == false
            || getProcAddress("glGetPerfMonitorCounterInfoAMD", glGetPerfMonitorCounterInfoAMD, false) == false
            || getProcAddress("glGenPerfMonitorsAMD", glGenPerfMonitorsAMD, false) == false
            || getProcAddress("glDeletePerfMonitorsAMD", glDeletePerfMonitorsAMD, false) == false
            || getProcAddress("glSelectPerfMonitorCountersAMD", glSelectPerfMonitorCountersAMD, false) == false
            || getProcAddress("glBeginPerfMonitorAMD", glBeginPerfMonitorAMD, false) == false
            || getProcAddress("glEndPerfMonitorAMD", glEndPerfMonitorAMD, false) == false
            || getProcAddress("glGetPerfMonitorCounterDataAMD", glGetPerfMonitorCounterDataAMD, false) == false
        ){
            GL_AMD_performance_monitor_supported = false;
        }
    }
    GL_AMD_texture_texture4_supported = isExtensionSupported("GL_AMD_texture_texture4", false);

    if(GL_AMD_vertex_shader_tesselator_supported = isExtensionSupported("GL_AMD_vertex_shader_tesselator", false)){
        if(getProcAddress("glTessellationFactorAMD", glTessellationFactorAMD, false) == false
            || getProcAddress("glTessellationModeAMD", glTessellationModeAMD, false) == false
        ){
            GL_AMD_vertex_shader_tesselator_supported = false;
        }
    }

    if(GL_EXT_provoking_vertex_supported = isExtensionSupported("GL_EXT_provoking_vertex", false)){
        if(getProcAddress("glProvokingVertexEXT", glProvokingVertexEXT, false) == false
        ){
            GL_EXT_provoking_vertex_supported = false;
        }
    }
    GL_EXT_texture_snorm_supported = isExtensionSupported("GL_EXT_texture_snorm", false);

    if(GL_AMD_draw_buffers_blend_supported = isExtensionSupported("GL_AMD_draw_buffers_blend", false)){
        if(getProcAddress("glBlendFuncIndexedAMD", glBlendFuncIndexedAMD, false) == false
            || getProcAddress("glBlendFuncSeparateIndexedAMD", glBlendFuncSeparateIndexedAMD, false) == false
            || getProcAddress("glBlendEquationIndexedAMD", glBlendEquationIndexedAMD, false) == false
            || getProcAddress("glBlendEquationSeparateIndexedAMD", glBlendEquationSeparateIndexedAMD, false) == false
        ){
            GL_AMD_draw_buffers_blend_supported = false;
        }
    }

    if(GL_APPLE_texture_range_supported = isExtensionSupported("GL_APPLE_texture_range", false)){
        if(getProcAddress("glTextureRangeAPPLE", glTextureRangeAPPLE, false) == false
            || getProcAddress("glGetTexParameterPointervAPPLE", glGetTexParameterPointervAPPLE, false) == false
        ){
            GL_APPLE_texture_range_supported = false;
        }
    }
    GL_APPLE_float_pixels_supported = isExtensionSupported("GL_APPLE_float_pixels", false);

    if(GL_APPLE_vertex_program_evaluators_supported = isExtensionSupported("GL_APPLE_vertex_program_evaluators", false)){
        if(getProcAddress("glEnableVertexAttribAPPLE", glEnableVertexAttribAPPLE, false) == false
            || getProcAddress("glDisableVertexAttribAPPLE", glDisableVertexAttribAPPLE, false) == false
            || getProcAddress("glIsVertexAttribEnabledAPPLE", glIsVertexAttribEnabledAPPLE, false) == false
            || getProcAddress("glMapVertexAttrib1dAPPLE", glMapVertexAttrib1dAPPLE, false) == false
            || getProcAddress("glMapVertexAttrib1fAPPLE", glMapVertexAttrib1fAPPLE, false) == false
            || getProcAddress("glMapVertexAttrib2dAPPLE", glMapVertexAttrib2dAPPLE, false) == false
            || getProcAddress("glMapVertexAttrib2fAPPLE", glMapVertexAttrib2fAPPLE, false) == false
        ){
            GL_APPLE_vertex_program_evaluators_supported = false;
        }
    }
    GL_APPLE_aux_depth_stencil_supported = isExtensionSupported("GL_APPLE_aux_depth_stencil", false);

    if(GL_APPLE_object_purgeable_supported = isExtensionSupported("GL_APPLE_object_purgeable", false)){
        if(getProcAddress("glObjectPurgeableAPPLE", glObjectPurgeableAPPLE, false) == false
            || getProcAddress("glObjectUnpurgeableAPPLE", glObjectUnpurgeableAPPLE, false) == false
            || getProcAddress("glGetObjectParameterivAPPLE", glGetObjectParameterivAPPLE, false) == false
        ){
            GL_APPLE_object_purgeable_supported = false;
        }
    }
    GL_APPLE_row_bytes_supported = isExtensionSupported("GL_APPLE_row_bytes", false);
    GL_APPLE_rgb_422_supported = isExtensionSupported("GL_APPLE_rgb_422", false);

    if(GL_NV_video_capture_supported = isExtensionSupported("GL_NV_video_capture", false)){
        if(getProcAddress("glBeginVideoCaptureNV", glBeginVideoCaptureNV, false) == false
            || getProcAddress("glBindVideoCaptureStreamBufferNV", glBindVideoCaptureStreamBufferNV, false) == false
            || getProcAddress("glBindVideoCaptureStreamTextureNV", glBindVideoCaptureStreamTextureNV, false) == false
            || getProcAddress("glEndVideoCaptureNV", glEndVideoCaptureNV, false) == false
            || getProcAddress("glGetVideoCaptureivNV", glGetVideoCaptureivNV, false) == false
            || getProcAddress("glGetVideoCaptureStreamivNV", glGetVideoCaptureStreamivNV, false) == false
            || getProcAddress("glGetVideoCaptureStreamfvNV", glGetVideoCaptureStreamfvNV, false) == false
            || getProcAddress("glGetVideoCaptureStreamdvNV", glGetVideoCaptureStreamdvNV, false) == false
            || getProcAddress("glVideoCaptureNV", glVideoCaptureNV, false) == false
            || getProcAddress("glVideoCaptureStreamParameterivNV", glVideoCaptureStreamParameterivNV, false) == false
            || getProcAddress("glVideoCaptureStreamParameterfvNV", glVideoCaptureStreamParameterfvNV, false) == false
            || getProcAddress("glVideoCaptureStreamParameterdvNV", glVideoCaptureStreamParameterdvNV, false) == false
        ){
            GL_NV_video_capture_supported = false;
        }
    }

    if(GL_NV_copy_image_supported = isExtensionSupported("GL_NV_copy_image", false)){
        if(getProcAddress("glCopyImageSubDataNV", glCopyImageSubDataNV, false) == false
        ){
            GL_NV_copy_image_supported = false;
        }
    }

    if(GL_EXT_separate_shader_objects_supported = isExtensionSupported("GL_EXT_separate_shader_objects", false)){
        if(getProcAddress("glUseShaderProgramEXT", glUseShaderProgramEXT, false) == false
            || getProcAddress("glActiveProgramEXT", glActiveProgramEXT, false) == false
            || getProcAddress("glCreateShaderProgramEXT", glCreateShaderProgramEXT, false) == false
        ){
            GL_EXT_separate_shader_objects_supported = false;
        }
    }
    GL_NV_parameter_buffer_object2_supported = isExtensionSupported("GL_NV_parameter_buffer_object2", false);

    if(GL_NV_shader_buffer_load_supported = isExtensionSupported("GL_NV_shader_buffer_load", false)){
        if(getProcAddress("glMakeBufferResidentNV", glMakeBufferResidentNV, false) == false
            || getProcAddress("glMakeBufferNonResidentNV", glMakeBufferNonResidentNV, false) == false
            || getProcAddress("glIsBufferResidentNV", glIsBufferResidentNV, false) == false
            || getProcAddress("glMakeNamedBufferResidentNV", glMakeNamedBufferResidentNV, false) == false
            || getProcAddress("glMakeNamedBufferNonResidentNV", glMakeNamedBufferNonResidentNV, false) == false
            || getProcAddress("glIsNamedBufferResidentNV", glIsNamedBufferResidentNV, false) == false
            || getProcAddress("glGetBufferParameterui64vNV", glGetBufferParameterui64vNV, false) == false
            || getProcAddress("glGetNamedBufferParameterui64vNV", glGetNamedBufferParameterui64vNV, false) == false
            || getProcAddress("glGetIntegerui64vNV", glGetIntegerui64vNV, false) == false
            || getProcAddress("glUniformui64NV", glUniformui64NV, false) == false
            || getProcAddress("glUniformui64vNV", glUniformui64vNV, false) == false
            || getProcAddress("glGetUniformui64vNV", glGetUniformui64vNV, false) == false
            || getProcAddress("glProgramUniformui64NV", glProgramUniformui64NV, false) == false
            || getProcAddress("glProgramUniformui64vNV", glProgramUniformui64vNV, false) == false
        ){
            GL_NV_shader_buffer_load_supported = false;
        }
    }

    if(GL_NV_vertex_buffer_unified_memory_supported = isExtensionSupported("GL_NV_vertex_buffer_unified_memory", false)){
        if(getProcAddress("glBufferAddressRangeNV", glBufferAddressRangeNV, false) == false
            || getProcAddress("glVertexFormatNV", glVertexFormatNV, false) == false
            || getProcAddress("glNormalFormatNV", glNormalFormatNV, false) == false
            || getProcAddress("glColorFormatNV", glColorFormatNV, false) == false
            || getProcAddress("glIndexFormatNV", glIndexFormatNV, false) == false
            || getProcAddress("glTexCoordFormatNV", glTexCoordFormatNV, false) == false
            || getProcAddress("glEdgeFlagFormatNV", glEdgeFlagFormatNV, false) == false
            || getProcAddress("glSecondaryColorFormatNV", glSecondaryColorFormatNV, false) == false
            || getProcAddress("glFogCoordFormatNV", glFogCoordFormatNV, false) == false
            || getProcAddress("glVertexAttribFormatNV", glVertexAttribFormatNV, false) == false
            || getProcAddress("glVertexAttribIFormatNV", glVertexAttribIFormatNV, false) == false
            || getProcAddress("glGetIntegerui64i_vNV", glGetIntegerui64i_vNV, false) == false
        ){
            GL_NV_vertex_buffer_unified_memory_supported = false;
        }
    }

    if(GL_NV_texture_barrier_supported = isExtensionSupported("GL_NV_texture_barrier", false)){
        if(getProcAddress("glTextureBarrierNV", glTextureBarrierNV, false) == false
        ){
            GL_NV_texture_barrier_supported = false;
        }
    }
    GL_AMD_shader_stencil_export_supported = isExtensionSupported("GL_AMD_shader_stencil_export", false);
    GL_AMD_seamless_cubemap_per_texture_supported = isExtensionSupported("GL_AMD_seamless_cubemap_per_texture", false);
    GL_AMD_conservative_depth_supported = isExtensionSupported("GL_AMD_conservative_depth", false);

    if(GL_EXT_shader_image_load_store_supported = isExtensionSupported("GL_EXT_shader_image_load_store", false)){
        if(getProcAddress("glBindImageTextureEXT", glBindImageTextureEXT, false) == false
            || getProcAddress("glMemoryBarrierEXT", glMemoryBarrierEXT, false) == false
        ){
            GL_EXT_shader_image_load_store_supported = false;
        }
    }

    if(GL_EXT_vertex_attrib_64bit_supported = isExtensionSupported("GL_EXT_vertex_attrib_64bit", false)){
        if(getProcAddress("glVertexAttribL1dEXT", glVertexAttribL1dEXT, false) == false
            || getProcAddress("glVertexAttribL2dEXT", glVertexAttribL2dEXT, false) == false
            || getProcAddress("glVertexAttribL3dEXT", glVertexAttribL3dEXT, false) == false
            || getProcAddress("glVertexAttribL4dEXT", glVertexAttribL4dEXT, false) == false
            || getProcAddress("glVertexAttribL1dvEXT", glVertexAttribL1dvEXT, false) == false
            || getProcAddress("glVertexAttribL2dvEXT", glVertexAttribL2dvEXT, false) == false
            || getProcAddress("glVertexAttribL3dvEXT", glVertexAttribL3dvEXT, false) == false
            || getProcAddress("glVertexAttribL4dvEXT", glVertexAttribL4dvEXT, false) == false
            || getProcAddress("glVertexAttribLPointerEXT", glVertexAttribLPointerEXT, false) == false
            || getProcAddress("glGetVertexAttribLdvEXT", glGetVertexAttribLdvEXT, false) == false
            || getProcAddress("glVertexArrayVertexAttribLOffsetEXT", glVertexArrayVertexAttribLOffsetEXT, false) == false
        ){
            GL_EXT_vertex_attrib_64bit_supported = false;
        }
    }

    if(GL_NV_gpu_program5_supported = isExtensionSupported("GL_NV_gpu_program5", false)){
        if(getProcAddress("glProgramSubroutineParametersuivNV", glProgramSubroutineParametersuivNV, false) == false
            || getProcAddress("glGetProgramSubroutineParameteruivNV", glGetProgramSubroutineParameteruivNV, false) == false
        ){
            GL_NV_gpu_program5_supported = false;
        }
    }

    if(GL_NV_gpu_shader5_supported = isExtensionSupported("GL_NV_gpu_shader5", false)){
        if(getProcAddress("glUniform1i64NV", glUniform1i64NV, false) == false
            || getProcAddress("glUniform2i64NV", glUniform2i64NV, false) == false
            || getProcAddress("glUniform3i64NV", glUniform3i64NV, false) == false
            || getProcAddress("glUniform4i64NV", glUniform4i64NV, false) == false
            || getProcAddress("glUniform1i64vNV", glUniform1i64vNV, false) == false
            || getProcAddress("glUniform2i64vNV", glUniform2i64vNV, false) == false
            || getProcAddress("glUniform3i64vNV", glUniform3i64vNV, false) == false
            || getProcAddress("glUniform4i64vNV", glUniform4i64vNV, false) == false
            || getProcAddress("glUniform1ui64NV", glUniform1ui64NV, false) == false
            || getProcAddress("glUniform2ui64NV", glUniform2ui64NV, false) == false
            || getProcAddress("glUniform3ui64NV", glUniform3ui64NV, false) == false
            || getProcAddress("glUniform4ui64NV", glUniform4ui64NV, false) == false
            || getProcAddress("glUniform1ui64vNV", glUniform1ui64vNV, false) == false
            || getProcAddress("glUniform2ui64vNV", glUniform2ui64vNV, false) == false
            || getProcAddress("glUniform3ui64vNV", glUniform3ui64vNV, false) == false
            || getProcAddress("glUniform4ui64vNV", glUniform4ui64vNV, false) == false
            || getProcAddress("glGetUniformi64vNV", glGetUniformi64vNV, false) == false
            || getProcAddress("glProgramUniform1i64NV", glProgramUniform1i64NV, false) == false
            || getProcAddress("glProgramUniform2i64NV", glProgramUniform2i64NV, false) == false
            || getProcAddress("glProgramUniform3i64NV", glProgramUniform3i64NV, false) == false
            || getProcAddress("glProgramUniform4i64NV", glProgramUniform4i64NV, false) == false
            || getProcAddress("glProgramUniform1i64vNV", glProgramUniform1i64vNV, false) == false
            || getProcAddress("glProgramUniform2i64vNV", glProgramUniform2i64vNV, false) == false
            || getProcAddress("glProgramUniform3i64vNV", glProgramUniform3i64vNV, false) == false
            || getProcAddress("glProgramUniform4i64vNV", glProgramUniform4i64vNV, false) == false
            || getProcAddress("glProgramUniform1ui64NV", glProgramUniform1ui64NV, false) == false
            || getProcAddress("glProgramUniform2ui64NV", glProgramUniform2ui64NV, false) == false
            || getProcAddress("glProgramUniform3ui64NV", glProgramUniform3ui64NV, false) == false
            || getProcAddress("glProgramUniform4ui64NV", glProgramUniform4ui64NV, false) == false
            || getProcAddress("glProgramUniform1ui64vNV", glProgramUniform1ui64vNV, false) == false
            || getProcAddress("glProgramUniform2ui64vNV", glProgramUniform2ui64vNV, false) == false
            || getProcAddress("glProgramUniform3ui64vNV", glProgramUniform3ui64vNV, false) == false
            || getProcAddress("glProgramUniform4ui64vNV", glProgramUniform4ui64vNV, false) == false
        ){
            GL_NV_gpu_shader5_supported = false;
        }
    }
    GL_NV_shader_buffer_store_supported = isExtensionSupported("GL_NV_shader_buffer_store", false);
    GL_NV_tessellation_program5_supported = isExtensionSupported("GL_NV_tessellation_program5", false);

    if(GL_NV_vertex_attrib_integer_64bit_supported = isExtensionSupported("GL_NV_vertex_attrib_integer_64bit", false)){
        if(getProcAddress("glVertexAttribL1i64NV", glVertexAttribL1i64NV, false) == false
            || getProcAddress("glVertexAttribL2i64NV", glVertexAttribL2i64NV, false) == false
            || getProcAddress("glVertexAttribL3i64NV", glVertexAttribL3i64NV, false) == false
            || getProcAddress("glVertexAttribL4i64NV", glVertexAttribL4i64NV, false) == false
            || getProcAddress("glVertexAttribL1i64vNV", glVertexAttribL1i64vNV, false) == false
            || getProcAddress("glVertexAttribL2i64vNV", glVertexAttribL2i64vNV, false) == false
            || getProcAddress("glVertexAttribL3i64vNV", glVertexAttribL3i64vNV, false) == false
            || getProcAddress("glVertexAttribL4i64vNV", glVertexAttribL4i64vNV, false) == false
            || getProcAddress("glVertexAttribL1ui64NV", glVertexAttribL1ui64NV, false) == false
            || getProcAddress("glVertexAttribL2ui64NV", glVertexAttribL2ui64NV, false) == false
            || getProcAddress("glVertexAttribL3ui64NV", glVertexAttribL3ui64NV, false) == false
            || getProcAddress("glVertexAttribL4ui64NV", glVertexAttribL4ui64NV, false) == false
            || getProcAddress("glVertexAttribL1ui64vNV", glVertexAttribL1ui64vNV, false) == false
            || getProcAddress("glVertexAttribL2ui64vNV", glVertexAttribL2ui64vNV, false) == false
            || getProcAddress("glVertexAttribL3ui64vNV", glVertexAttribL3ui64vNV, false) == false
            || getProcAddress("glVertexAttribL4ui64vNV", glVertexAttribL4ui64vNV, false) == false
            || getProcAddress("glGetVertexAttribLi64vNV", glGetVertexAttribLi64vNV, false) == false
            || getProcAddress("glGetVertexAttribLui64vNV", glGetVertexAttribLui64vNV, false) == false
            || getProcAddress("glVertexAttribLFormatNV", glVertexAttribLFormatNV, false) == false
        ){
            GL_NV_vertex_attrib_integer_64bit_supported = false;
        }
    }
    GL_NV_multisample_coverage_supported = isExtensionSupported("GL_NV_multisample_coverage", false);

    if(GL_AMD_name_gen_delete_supported = isExtensionSupported("GL_AMD_name_gen_delete", false)){
        if(getProcAddress("glGenNamesAMD", glGenNamesAMD, false) == false
            || getProcAddress("glDeleteNamesAMD", glDeleteNamesAMD, false) == false
            || getProcAddress("glIsNameAMD", glIsNameAMD, false) == false
        ){
            GL_AMD_name_gen_delete_supported = false;
        }
    }

    if(GL_AMD_debug_output_supported = isExtensionSupported("GL_AMD_debug_output", false)){
        if(getProcAddress("glDebugMessageEnableAMD", glDebugMessageEnableAMD, false) == false
            || getProcAddress("glDebugMessageInsertAMD", glDebugMessageInsertAMD, false) == false
            || getProcAddress("glDebugMessageCallbackAMD", glDebugMessageCallbackAMD, false) == false
            || getProcAddress("glGetDebugMessageLogAMD", glGetDebugMessageLogAMD, false) == false
        ){
            GL_AMD_debug_output_supported = false;
        }
    }

    if(GL_NV_vdpau_interop_supported = isExtensionSupported("GL_NV_vdpau_interop", false)){
        if(getProcAddress("glVDPAUInitNV", glVDPAUInitNV, false) == false
            || getProcAddress("glVDPAUFiniNV", glVDPAUFiniNV, false) == false
            || getProcAddress("glVDPAURegisterVideoSurfaceNV", glVDPAURegisterVideoSurfaceNV, false) == false
            || getProcAddress("glVDPAURegisterOutputSurfaceNV", glVDPAURegisterOutputSurfaceNV, false) == false
            || getProcAddress("glVDPAUIsSurfaceNV", glVDPAUIsSurfaceNV, false) == false
            || getProcAddress("glVDPAUUnregisterSurfaceNV", glVDPAUUnregisterSurfaceNV, false) == false
            || getProcAddress("glVDPAUGetSurfaceivNV", glVDPAUGetSurfaceivNV, false) == false
            || getProcAddress("glVDPAUSurfaceAccessNV", glVDPAUSurfaceAccessNV, false) == false
            || getProcAddress("glVDPAUMapSurfacesNV", glVDPAUMapSurfacesNV, false) == false
            || getProcAddress("glVDPAUUnmapSurfacesNV", glVDPAUUnmapSurfacesNV, false) == false
        ){
            GL_NV_vdpau_interop_supported = false;
        }
    }
    GL_AMD_transform_feedback3_lines_triangles_supported = isExtensionSupported("GL_AMD_transform_feedback3_lines_triangles", false);
    GL_AMD_depth_clamp_separate_supported = isExtensionSupported("GL_AMD_depth_clamp_separate", false);
    GL_EXT_texture_sRGB_decode_supported = isExtensionSupported("GL_EXT_texture_sRGB_decode", false);

    if(GL_NV_texture_multisample_supported = isExtensionSupported("GL_NV_texture_multisample", false)){
        if(getProcAddress("glTexImage2DMultisampleCoverageNV", glTexImage2DMultisampleCoverageNV, false) == false
            || getProcAddress("glTexImage3DMultisampleCoverageNV", glTexImage3DMultisampleCoverageNV, false) == false
            || getProcAddress("glTextureImage2DMultisampleNV", glTextureImage2DMultisampleNV, false) == false
            || getProcAddress("glTextureImage3DMultisampleNV", glTextureImage3DMultisampleNV, false) == false
            || getProcAddress("glTextureImage2DMultisampleCoverageNV", glTextureImage2DMultisampleCoverageNV, false) == false
            || getProcAddress("glTextureImage3DMultisampleCoverageNV", glTextureImage3DMultisampleCoverageNV, false) == false
        ){
            GL_NV_texture_multisample_supported = false;
        }
    }
    GL_AMD_blend_minmax_factor_supported = isExtensionSupported("GL_AMD_blend_minmax_factor", false);

    if(GL_AMD_sample_positions_supported = isExtensionSupported("GL_AMD_sample_positions", false)){
        if(getProcAddress("glSetMultisamplefvAMD", glSetMultisamplefvAMD, false) == false
        ){
            GL_AMD_sample_positions_supported = false;
        }
    }

    if(GL_EXT_x11_sync_object_supported = isExtensionSupported("GL_EXT_x11_sync_object", false)){
        if(getProcAddress("glImportSyncEXT", glImportSyncEXT, false) == false
        ){
            GL_EXT_x11_sync_object_supported = false;
        }
    }

    if(GL_AMD_multi_draw_indirect_supported = isExtensionSupported("GL_AMD_multi_draw_indirect", false)){
        if(getProcAddress("glMultiDrawArraysIndirectAMD", glMultiDrawArraysIndirectAMD, false) == false
            || getProcAddress("glMultiDrawElementsIndirectAMD", glMultiDrawElementsIndirectAMD, false) == false
        ){
            GL_AMD_multi_draw_indirect_supported = false;
        }
    }
    GL_EXT_framebuffer_multisample_blit_scaled_supported = isExtensionSupported("GL_EXT_framebuffer_multisample_blit_scaled", false);

    if(GL_NV_path_rendering_supported = isExtensionSupported("GL_NV_path_rendering", false)){
        if(getProcAddress("glGenPathsNV", glGenPathsNV, false) == false
            || getProcAddress("glDeletePathsNV", glDeletePathsNV, false) == false
            || getProcAddress("glIsPathNV", glIsPathNV, false) == false
            || getProcAddress("glPathCommandsNV", glPathCommandsNV, false) == false
            || getProcAddress("glPathCoordsNV", glPathCoordsNV, false) == false
            || getProcAddress("glPathSubCommandsNV", glPathSubCommandsNV, false) == false
            || getProcAddress("glPathSubCoordsNV", glPathSubCoordsNV, false) == false
            || getProcAddress("glPathStringNV", glPathStringNV, false) == false
            || getProcAddress("glPathGlyphsNV", glPathGlyphsNV, false) == false
            || getProcAddress("glPathGlyphRangeNV", glPathGlyphRangeNV, false) == false
            || getProcAddress("glWeightPathsNV", glWeightPathsNV, false) == false
            || getProcAddress("glCopyPathNV", glCopyPathNV, false) == false
            || getProcAddress("glInterpolatePathsNV", glInterpolatePathsNV, false) == false
            || getProcAddress("glTransformPathNV", glTransformPathNV, false) == false
            || getProcAddress("glPathParameterivNV", glPathParameterivNV, false) == false
            || getProcAddress("glPathParameteriNV", glPathParameteriNV, false) == false
            || getProcAddress("glPathParameterfvNV", glPathParameterfvNV, false) == false
            || getProcAddress("glPathParameterfNV", glPathParameterfNV, false) == false
            || getProcAddress("glPathDashArrayNV", glPathDashArrayNV, false) == false
            || getProcAddress("glPathStencilFuncNV", glPathStencilFuncNV, false) == false
            || getProcAddress("glPathStencilDepthOffsetNV", glPathStencilDepthOffsetNV, false) == false
            || getProcAddress("glStencilFillPathNV", glStencilFillPathNV, false) == false
            || getProcAddress("glStencilStrokePathNV", glStencilStrokePathNV, false) == false
            || getProcAddress("glStencilFillPathInstancedNV", glStencilFillPathInstancedNV, false) == false
            || getProcAddress("glStencilStrokePathInstancedNV", glStencilStrokePathInstancedNV, false) == false
            || getProcAddress("glPathCoverDepthFuncNV", glPathCoverDepthFuncNV, false) == false
            || getProcAddress("glPathColorGenNV", glPathColorGenNV, false) == false
            || getProcAddress("glPathTexGenNV", glPathTexGenNV, false) == false
            || getProcAddress("glPathFogGenNV", glPathFogGenNV, false) == false
            || getProcAddress("glCoverFillPathNV", glCoverFillPathNV, false) == false
            || getProcAddress("glCoverStrokePathNV", glCoverStrokePathNV, false) == false
            || getProcAddress("glCoverFillPathInstancedNV", glCoverFillPathInstancedNV, false) == false
            || getProcAddress("glCoverStrokePathInstancedNV", glCoverStrokePathInstancedNV, false) == false
            || getProcAddress("glGetPathParameterivNV", glGetPathParameterivNV, false) == false
            || getProcAddress("glGetPathParameterfvNV", glGetPathParameterfvNV, false) == false
            || getProcAddress("glGetPathCommandsNV", glGetPathCommandsNV, false) == false
            || getProcAddress("glGetPathCoordsNV", glGetPathCoordsNV, false) == false
            || getProcAddress("glGetPathDashArrayNV", glGetPathDashArrayNV, false) == false
            || getProcAddress("glGetPathMetricsNV", glGetPathMetricsNV, false) == false
            || getProcAddress("glGetPathMetricRangeNV", glGetPathMetricRangeNV, false) == false
            || getProcAddress("glGetPathSpacingNV", glGetPathSpacingNV, false) == false
            || getProcAddress("glGetPathColorGenivNV", glGetPathColorGenivNV, false) == false
            || getProcAddress("glGetPathColorGenfvNV", glGetPathColorGenfvNV, false) == false
            || getProcAddress("glGetPathTexGenivNV", glGetPathTexGenivNV, false) == false
            || getProcAddress("glGetPathTexGenfvNV", glGetPathTexGenfvNV, false) == false
            || getProcAddress("glIsPointInFillPathNV", glIsPointInFillPathNV, false) == false
            || getProcAddress("glIsPointInStrokePathNV", glIsPointInStrokePathNV, false) == false
            || getProcAddress("glGetPathLengthNV", glGetPathLengthNV, false) == false
            || getProcAddress("glPointAlongPathNV", glPointAlongPathNV, false) == false
        ){
            GL_NV_path_rendering_supported = false;
        }
    }
    GL_AMD_pinned_memory_supported = isExtensionSupported("GL_AMD_pinned_memory", false);

    if(GL_AMD_stencil_operation_extended_supported = isExtensionSupported("GL_AMD_stencil_operation_extended", false)){
        if(getProcAddress("glStencilOpValueAMD", glStencilOpValueAMD, false) == false
        ){
            GL_AMD_stencil_operation_extended_supported = false;
        }
    }
    GL_AMD_vertex_shader_viewport_index_supported = isExtensionSupported("GL_AMD_vertex_shader_viewport_index", false);
    GL_AMD_vertex_shader_layer_supported = isExtensionSupported("GL_AMD_vertex_shader_layer", false);

    if(GL_NV_bindless_texture_supported = isExtensionSupported("GL_NV_bindless_texture", false)){
        if(getProcAddress("glGetTextureHandleNV", glGetTextureHandleNV, false) == false
            || getProcAddress("glGetTextureSamplerHandleNV", glGetTextureSamplerHandleNV, false) == false
            || getProcAddress("glMakeTextureHandleResidentNV", glMakeTextureHandleResidentNV, false) == false
            || getProcAddress("glMakeTextureHandleNonResidentNV", glMakeTextureHandleNonResidentNV, false) == false
            || getProcAddress("glGetImageHandleNV", glGetImageHandleNV, false) == false
            || getProcAddress("glMakeImageHandleResidentNV", glMakeImageHandleResidentNV, false) == false
            || getProcAddress("glMakeImageHandleNonResidentNV", glMakeImageHandleNonResidentNV, false) == false
            || getProcAddress("glUniformHandleui64NV", glUniformHandleui64NV, false) == false
            || getProcAddress("glUniformHandleui64vNV", glUniformHandleui64vNV, false) == false
            || getProcAddress("glProgramUniformHandleui64NV", glProgramUniformHandleui64NV, false) == false
            || getProcAddress("glProgramUniformHandleui64vNV", glProgramUniformHandleui64vNV, false) == false
            || getProcAddress("glIsTextureHandleResidentNV", glIsTextureHandleResidentNV, false) == false
            || getProcAddress("glIsImageHandleResidentNV", glIsImageHandleResidentNV, false) == false
        ){
            GL_NV_bindless_texture_supported = false;
        }
    }
    GL_NV_shader_atomic_float_supported = isExtensionSupported("GL_NV_shader_atomic_float", false);
    GL_AMD_query_buffer_object_supported = isExtensionSupported("GL_AMD_query_buffer_object", false);

    if(GL_AMD_sparse_texture_supported = isExtensionSupported("GL_AMD_sparse_texture", false)){
        if(getProcAddress("glTexStorageSparseAMD", glTexStorageSparseAMD, false) == false
            || getProcAddress("glTextureStorageSparseAMD", glTextureStorageSparseAMD, false) == false
        ){
            GL_AMD_sparse_texture_supported = false;
        }
    }
    
    
    return true;
}


OPENGL_NAMESPACE_END

